(转载)Python爬取百度图片

————————————————
版权声明:本文为CSDN博主「数据科学家修炼之道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiligey1/article/details/73321152

感谢博主,这个非常使用,开袋即食的那种

新人上路, 老司机们请多多关照, 写的不好的地方, 还请多指教.

 

 

 

在很久很久以前, 我是一个苦逼的90后挨踢空穴老人, 一个人的夜里可是什么事都能干得出来! 这不, 我用我的程序把美女图片给抓了过来…

言归正传, 本文介绍如何爬百度图片(滑稽.jpg):

输入想要抓取的图片的关键字, 如"猫"、“美女"等, 然后输出百度图片搜索"猫”、"美女"的所有图片
采用翻页模式进行爬取
1. 分析网页结构

http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word=“keyword”

精简一下该网址,其实就是↓
https://image.baidu.com/search/flip?tn=baiduimage&word=“keyword”
在浏览器中访问上述网址, 得到如下页面:

 

 

可以看到, 图片是以翻页的形式展现的. 其次, 搜索词"keyword"即为网址最后的word的值. 所以, 如果你想搜什么, 就把"word=“后面的keyword改成对应的词即可, 如"猫”

 

 

 

 

然后看看这个网址是不是和我们之前设想的一样(即keyword=猫).
复制过来一看
http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1582615702295_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=0&height=0&face=0&istype=2&ie=utf-8&ctd=1582615702296%5E00_1665X948&sid=&word=%E7%8C%AB

感觉不对劲, 我要的是"猫", "%E7%8C%AB"是什么鬼?!
————————————————
版权声明:本文为CSDN博主「数据科学家修炼之道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiligey1/article/details/73321152

 

 

 

原来, 还需要一顿操作:

>>>from urllib.parse import quote
>>>keyword=""
>>>keyword=quote(keyword)
>>>keyword
'%E7%8C%AB'

现在, 就可以拼接网页了: ....(一大堆) + keyword="你想搜索的关键词"

2. 获取当前页的所有图片的链接

右键查看网页源代码之后, 发现:

 

 

 

图片的网址都是这样的格式: "objURL":"网址", 那就好办了, 直接用正则表达式就能解决

1 import re
2 pattern_pic = '"objURL":"(.*?)",'
3 # 这里的html就是网页的源代码的内容, 此处不介绍, 稍后给出
4 pic_list = re.findall(pattern_pic, html, re.S)  # 存储当前页的所有图片的url的列表

3. 获取当前页的下一页的链接

下一页的链接同理根据正则得出:

 1 pattern_fanye = '<a href="(.*)" class="n">下一页</a>'

2 fanye_url = re.findall(pattern_fanye, html)[0] # 下一页的链接 

4. 获取所有页的图片的链接

上面已经根据当前页的url得到了当前页的所有图片的链接, 以及下一页的url.
如此, 循环下去, 即可得到每一页的所有图片的链接.

1 all_pic_list = []  # 存储所有翻页的所有图片的链接的列表
2 while 1:
3     all_pic_list.extend(pic_list)
4     if 循环完所有翻页:
5         break

5.下载图片

已知了图片链接, 直接下载即可

1 for i, pic_url in enumerate(all_pic_list):
2     pic = requests.get(pic_url)
3     string = './images/' + str(i + 1) + '.jpg'
4     with open(string, 'wb') as f:
5         f.write(pic.content)

6.源代码

👉 https://github.com/xiligey/baidu_photo_spider

posted @ 2021-09-18 21:56  霜井  阅读(833)  评论(0编辑  收藏  举报