当我们看到懂车帝上所有轿车的图片想要把它爬取下来时,却发现他的数据并不在网页源代码内,这就给我们的爬取工作造成了很大的难度,那么今天我们就来探讨一下如何爬取懂车帝的所有轿车图片。
首先我们先来分析网页;懂车帝是采用Ajax动态加载并且返回json数据的一种反爬措施,应对这种网站的方法就是先找到他的Ajax接口,然后请求他每个新增数据的URL地址,然后返回json数据,再从返回的json数据当中提取所需要的数据。那么接下来我们在需要爬取的页面单击鼠标右键选择检查,选择Network里面的XHR,刷新页面,然后向下滑动让网站发送新的请求,然后我们在所有的请求中寻找数据,最后我们发现它所有的数据都在city name这个请求里面,复制这个请求的Request URL,那么接下来我们就建立python文件。
首先导入requests库,然后将我们刚才复制的Request URL定义为变量,这里要注意,这里是POST请求,不是GET请求,我们在Network的页面向下找,From Data就是通过POST方法上传的数据,我们把这些数据复制到我们的程序当中,定义为变量,同时我们还发现,Ajax的数据更新是通过offset指每次加1来实现的,那么我们就用for循环来模拟出offset值得变化。
我们请求网页的时候,一定要选择POST方法,然后将需要上传的From Data中的数据传入,在传入headers请求头,返回json数据,然后一级一级的从返回的json数据当中提取出我们想要的数据。我们提取出里面的cover_url,就是汽车图片的URL地址,我们GET请求这些URL地址,然后把图片保存下来,这样,我们的程序就做完了。
下面的完整的代码,注意要在python文件所在位置新建一个懂车帝轿车的文件夹用来保存图片,这样才能成功运行。
如果大家还有什么更好的爬取思路,欢迎讨论。