点赞再看,养成习惯

[toc]

偶然发现一个网站,先看看效果

下面就授人以渔

分析一下

站点:https://www.gamersky.com/ent/

打开网站,有多个栏目,一一翻阅后,我们决定采集游民福利栏目。目测有 200*20*66+ z

打开后,我们现在就是一个 ul -> li -> div -> ... -> a -> https://...shtml,拿到详情页。

详情页里边就是我们今天要调试的img了 下图就是了

步骤

  1. 栏目页请求解析出详情页
  2. 详情页解析出图片地址
  3. 翻页并下载到 D:
  4. 查看本地图片查漏

源码

前面我也在用java写过几个爬虫,后来看还是python更香,所以果断切换。

我这里使用的 VSCode 编辑器,很轻量级好用。版本是 python3.7 的,用了Anaconda3,它是 python 的一个集成环境,非常好用。

这几个库都是python官方自带的
import requests
import re
import os
import hashlib

不放源码就是耍流氓源码:

import requests
import re
import os
import hashlib
from urllib.request import urlretrieve
os.makedirs('D:\\photo\\', exist_ok=True)

## 获取详情页html
def get_detail_html(url):
   try:
       user_agent2 = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Aoyou/W2ZjRnNwcnxUNF9jbloLVppyi3m8uIwBp69QKGQFvyaY04TkBvm7s4d8hQ=='
       response = requests.get(url, headers={'User-Agent': user_agent2})
       response.raise_for_status()
       response.encoding = response.apparent_encoding
   except Exception as e:
       print("ERROR")
   else:
       print(response.url)
       print("ok")
       return response.content

# 获取全部链接
def get_img_url(html):
    urls = []
    pat = r'src="(http.+?\.jpg)"'
    imglist = re.findall(pat, html) 
    for img in imglist:
        if(len(img) < 100):
            urls.append(img)
    return urls

# 存到D盘中去
def downloadImg(imgUrls):
    for imgUrl in imgUrls:
        urlretrieve(imgUrl, 'D:\\photo\\' + get_md5(imgUrl) + '.png')
        print(imgUrl)

def get_md5(imgUrl):
    return hashlib.md5(imgUrl.encode('utf-8')).hexdigest()

if __name__ == '__main__':
    url = "https://www.gamersky.com/ent/202107/1406688.shtml"
    url2 = "https://www.gamersky.com/ent/202104/1379451.shtml"
    html = get_detail_html(url2)
    imgUrls = get_img_url(str(html))
    print(imgUrls)
    downloadImg(imgUrls)
    print("采集结束,快去D:看看")

一键运行下载本地

待解决

  1. 列表翻页
  2. 详情页翻页

这俩个问题,详情页是个url拼接,应该没啥难度

难点

列表页可能是js的,这几天处理一下