Python3爬虫爬取图片
最近看完了崔庆才先生的《Python3网络爬虫开发实战》,了解了不少的新知识。现在打算找几个项目练手。但是我暂时没有什么很好的想法,那么就先从美女图开始爬起吧!
以下是基本思路:
网页布局分析:
整个网页结构很清晰,上边一张大图,下边是几张小的缩略图,大图上有一个切换下一张的按钮。看美女当然是画质优先,所以我们的目标是爬取这些美女图的原图。
按下F12进入开发者模式,看一下有什么‘可疑的地方’
选择最大的图片,在查看器中看到是一个img标签,在这个img标签中有两个src,两个都试一下,直接双击并复制,粘贴到地址栏访问。
从第一个链接中得到的图片明显要大一些,所以要爬取的话肯定是爬取第一个src中的图片。
同时发现两个链接的后缀都是t…jpg的形式,由此推断该串文字为该图片的id,将其他图片的id按照格式复制到链接中一试,果然。
再看一下缩略图的标签是怎么样的:
只有一个src链接,但是访问得到的却是小的缩略图,这肯定是不能要的,那怎么办?难道要用python一次一次点击缩略图吗?
肯定不行!将开发者窗口调到网络窗口,将filter调至XHR,观察ajax请求,点击缩略图旁边的按钮请求下一组图片,在网络窗口中发现新增了一条ajax请求,再查看响应,这条请求就是图片的请求,于是爬取的方式基本确定:分析ajax请求并爬取图片。同时在上边的步骤中我们了解到,每张图片都有其唯一的imgkey,我们只需要获取每张图片的imgkey并通过特定网页的请求就可以获取到这张图片。
现在分析ajax请求:
通过网络窗口采集到的ajax请求我们发现,请求采用的是get方法。
https://image.so.com/z?ch=beauty&a=jsonpViewScroll&i=5&count=30
并且可以发现,每次请求都只有参数i变化,每次递增4,于是我们可以构造一个循环来实现对图片的批量请求:
编写代码如下:
main.py
import requests
import json
base_url = 'https://image.so.com/z?ch=beauty&t1=625&a=jsonpViewScroll&i={}&count=30'
results = []
for i in range(1, 33):
url = base_url.format(i*4)
response = requests.get(url)
datas = response.json()['data']
for data in datas:
for info in data['groupdata'