今天算是把百度图片的爬取程序又自己复习了一遍。
百度的图片是静态加载的,从F12的审查元素中是无法找到对应的图片的下载地址等信息的,因此需要通过抓包的方式来实现对图片下载地址的获取。
需要查看看F12的network中的XHR的内容,里面一般只会有两条JSON的信息,也会有相应的请求地址,通过请求地址可以找到对应的JSON文件,把文件loads下来,图片的下载地址其实就藏在DATA这个键下面。
有很多人都认为百度的图片地址是经过加密的,因此即使找到了这个JSON文件,我们依然只能从中找到加密过的百度下载地址,这个地址是藏在objURL这个键下面的。因此要获得真正的下载地址,需要对这个地址进行解密,网上有对应的解密程序。
我发现在DATA的值里面,还藏有一个备用的下载地址,键名叫做replaceUrl,名字也很明显的表示了他的用途。但是有一点问题需要提到的是,并不是DATA中的每一个量都有replaceUrl这个键,有些是没有的,我花了一早上的时间在这上面,因为我看到了有这个键,当我用这个键从字典中取值时却总是报错,而且还能看到已经取出值了,这就奇怪了,已经取出值了,也看到这个键了,为什么还能报错呢?最后我才想明白,我对DATA里的量进行了遍历,可是有些值中是没有这个键的,因此就会报错,所以我每次取键前都先判断是否有这个键,有这个键我才取值。然后就是这个键里面的另一个字典,里面有一个ObjURL键,这个键里面的值就是我们要的下载地址。
最后存在的一些问题是,有些图片下载不下来,我没能调好下载程序去应对这样的情况,导致有时候会在一张图片上停留很久的时间。另一个问题是我本来是设计了一个可以显示下载进度的程序的,可是现在只能显示下载到100%的情况,理论上他应该是一个由小到大的过程。不过好在这都不是主要程序。
下一步的想法是爬一些视频。两个链接,下一步就从这里开始吧。