失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python爬取百度图片(高清原图)

Python爬取百度图片(高清原图)

时间:2019-10-11 20:26:32

相关推荐

Python爬取百度图片(高清原图)

今日目标如题,爬取百度的图片,高清原图,而不是缩略图:/

百度图片网站的坑比较多,可能大多数人一看网站发现是动态时就会立马去Network里面找数据了,然后发现里面存的都是缩略图,怎么办?进JS找,然后断点调试等等。。。 这是确实是个办法,但对于我们这种不懂JS的小白根本就不懂呀! 那还有没有其他办法呢? 当然是有的,今天我会分享其中一个稍微简单点的办法,加上我前两篇写的跟今天写的如果都学会的话,基本90%的图片都能顺利扒下来,剩下的10%就是那些需要登录和VIP了。

好,话不多说,直接开搞(上图):

不知道大伙有没有发现两张哪里不一样呢?

是的,网址不一样,第一张图片的网址一眼看不到边,第二张图片的网址则是比较正常的网址长度,但是呈现出来的内容确实一模一样的----由此便可以看出:第一张图片的网址加了很多不必要的东西,而这些东西对用户是没有影响的,是给爬虫增加爬取难度的。

既然看到不同了,那要怎么知道哪些是可以用的,哪些是不可以用的呢?

看图,框框里面的东西很明显是没有什么用的,既然没用就可以去掉,同理,可以一步一步去掉无用的,剩下的就是我们要找的真正的网址。

既然网址找到了,那么如何找到图片呢,我们打开网页源代码,发现都是JS代码,怎么搞?JS咱没玩过啊。

其实这也是百度搞的一个坑,我们需要的图片链接就在网页源代码里面,那么要如何找到我们需要的东西呢?很简单,看图片的格式,然后去网页源代码里面找就可以了

同一张图片,里面有蛮多size,选择你想要的就可以了,我选择的是原图

既然图片链接找到了,那就代表网站分析完毕,直接上代码就行了:

import reimport requestsurl = '/search/index?tn=baiduimage&ipn=r&word=高清壁纸&pn=0'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',}res = requests.get(url,headers=headers).textfor img in re.findall('"objURL":"(.*?)",',res):print(img)

output:/images/upload/upc/tx/wallpaper/1306/21/c1/22386490_1371808534385.jpghttp://b-/uploads/item/12/27/1227233312_feEjH.jpeg/edpic/8c/d2/d9/8cd2d9421559855d153e872faf514137.jpghttp://01./1011/1011095832_49d23dd458b7446249d84fda3d4ea1c1_2.jpeg/edpic/f1/63/4d/f1634dc19bcaae62e769b3d9315cf194.jpghttp://a./zhidao/pic/item/e824b899a9014c08be3151a4087b02087bf4f4ad.jpg/edpic/2d/a3/18/2da318335152ebe82061e55afa883be5.jpg/edpic/58/bf/e9/58bfe913ea48cdb2b4174432cd103583.jpghttp://b./zhidao/pic/item/63d0f703918fa0ece9221cfe279759ee3c6ddb58.jpghttp://b.zol-/desk/bizhi/start/3/1379385428221.jpg...

因为位置的特殊性,只好使用re正则表达式,轻松匹配到图片链接。

这里有个小问题,百度图片有很多格式的,jpg,jpeg,png等等,所以为了更加完善点,咱们使用os模块匹配图片后缀,全部代码:

import reimport requestsimport os def get_url(word):url = f'/search/index?tn=baiduimage&ipn=r&word={word}&pn=0'# pn代表翻页,每30张图片为1页 0 30 60 90 ....headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',}res = requests.get(url,headers=headers).textfor img in re.findall('"objURL":"(.*?)",',res):print(img) image = requests.get(img,headers=headers)file_name = img.split("/")[-1] #使用图片链接后缀作为图片名称with open("./images/"+str(file_name),"wb") as f:f.write(image.content)if __name__ == "__main__":word = input("请输入您要采集的图片名称:")get_url(word)

搞定!有啥不理解的可以在下方留言!大家伙一起交流交流!!

如果觉得《Python爬取百度图片(高清原图)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。