python爬取通过百度图片搜出来的所有图片

news/2025/2/22 15:49:14/

文章目录

  • 一、页面分析
  • 二、源代码
    • 1.思路
    • 2.代码
  • 总结


今天来讲一下怎么爬取百度图片搜索出来的图片并进行下载


需求:由用户输入关键字然后创建一个以关键字命名的文件夹,文件夹下要有这个关键字所搜索出来的所有图片。
那么:
1、用户输入
2、创建一个文件夹
3、图片

一、页面分析

首先我们通过百度图片搜索zhoujielun(不只限于zhoujielun)。
在这里插入图片描述
然后F12,选择Network然后在选择XHR。在刷新页面。
在这里插入图片描述
刷新页面之后我们把网页往下滑,然后发现加载出来了几个相似的链接,随便点一个发现里面有30个数据,由此看来url已经被我们成功找到了。在这里插入图片描述
随机选择几个url进行分析,在这里我选择了三个连续的url进行分析,发现只有pn和最后这一串数字不一样。红色划线的地方应该就是url字符串。
在这里插入图片描述在这里插入图片描述
接下来我们来请求其中一个页面再进一步分析。
这里绿色划线的应该就是图片总数了,红色划线的就是具体图片的url。
在这里插入图片描述

在这里插入图片描述

二、源代码

1.思路

1、找到含30张图片具体链接的url,分析
2、将输入的汉字编码引入url,将时间戳转换来的13位数字引入url
3、向引入好的url发起请求并得到响应
4、在得到的响应内容里找具体图片的url
5、向图片的具体url发请求得到content
6、在文件夹下写入图片

2.代码

# -!- coding: utf-8 -!-
import re
import requests
import time #时间模块
from urllib import parse #对汉字进行编码
import os #文件操作
from fake_useragent import UserAgent #随机生成一个user-agentclass Picture:def __init__(self):self.name_ = input('请输入关键字:')self.name = parse.quote(self.name_) #周杰伦 --> 编码self.times = str(int(time.time()*1000)) #时间戳-->补全urlself.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8032920601831512061&ipn=rj&ct=201326592&is=&fp=result&fr=&word={}&cg=star&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={}&rn=30&gsm=1e&{}='self.headers = {'User-Agent':UserAgent().random}#请求30张图片的链接def get_one_html(self,url,pn):response = requests.get(url=url.format(self.name,self.name, pn, self.times), headers=self.headers).content.decode('utf-8')return response#请求单张图片内容def get_two_html(self,url):response = requests.get(url=url, headers=self.headers).contentreturn response#解析含30张图片的html的内容def parse_html(self,regex,html):content = regex.findall(html)return content#主函数def run(self):#判断该目录下是否存在与输入名称一样的文件夹 如果没有则创建 有就不执行if下的创建if not os.path.exists('./{}/'.format(self.name_)):os.mkdir('./{}'.format(self.name_))response = self.get_one_html(self.url,0)regex1 = re.compile('"displayNum":(.*?),')num = self.parse_html(regex1,response)[0] #获取总的照片数量print('该关键字下一共有{}张照片'.format(num)) #打印总的照片数量#判断总数能不能整除30if int(num)%30 == 0:pn = int(num)/30else:# 总数量除30是因为每一个链接有30张照片 +2是因为要想range最多取到该数就需要+1# 另外的+1是因为该总数除30可能有余数,有余数就需要一个链接 所以要+1pn = int(num)//30 + 2for i in range(pn): #遍历每一个含30张图片的链接resp = self.get_one_html(self.url, i * 30)regex2 = re.compile('"middleURL":"(.*?)"')urls = self.parse_html(regex2,resp) #得到30张图片的链接(30个)for u in urls:  #遍历每张图片的链接content = self.get_two_html(u) #请求每张图片的内容# 打开该关键字下的文件写入图片with open('./{}/{}.jpg'.format(self.name_,u[28:35]),'wb') as f:f.write(content)print('完成一张照片') #下载完一张图片后打印if __name__ == '__main__':spider = Picture()spider.run()

总结

这次并没有使用多线程爬取数据,如果有小伙伴想要知道怎么用多线程爬取的话可以私信我哦。 谢谢大家!!!

http://www.ppmy.cn/news/269468.html

相关文章

iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里

当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。 8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事&a…

周杰伦的个人档案

2007-10-17 07:11:40 个人档案英文名: Chow, Jay 生 日: 1979-01-18 身 高: 173cm 体 重: 60kg 血 型: O 星 座: 山羊座 学 历: 淡江中学音乐科 专 长: 写歌、作词、打球 专精乐器: 钢琴、大提琴、吉他、爵士鼓 音乐类型: R&B 运 动: 篮球 口头禅: 屌不屌 最大优点: 词…

感谢周杰伦

周杰伦应该不是第一个擅长说唱的人,但他对将说唱普及到大众的过程中却是功不可没的。我一直欣赏换个角度看问题,本来嘛,谁也没规定“唱歌”就必须用七个音符来表现,说唱同样是一种很不错的表演形式,特别是,…

【周杰伦】Mojito-互联网版

麻烦给程序员们来一个需求 我喜欢阅读他挠头时的忧愁 而我的原型 画不用太多 这世界已经因为他美好增收 没有跟他沉思一样浓郁的场景 就别浪费时间鼓吹需求合理吧 老板的威压 客户的电话 所有功能都因为他不在话下 这奋笔疾书 忘了测试的催促 你所在之处 需求都被征服 跃迁的代…

周华健·周杰伦·周笔畅

下午去弄头发,给我卷头发的MM听到音响那边放起某首我没听过的歌,突然兴奋地对我说,“这歌是笔畅唱的,笔畅你知道吗?超级女声你看过吗?”我知道,可是我不喜欢-_-。 群里面,同事问&am…

如何免费在线听周杰伦的歌曲

我平常用网易云来听音乐 http://music.163.com/ ,网易云除了歌好听,评论更有故事。 之前已经写过网易云音乐了,有兴趣看看之前的文章那些你可能不知道的网易云音乐奇技淫巧 可惜周杰伦的大部分歌曲网易没有版权,还好我保存了一份…

周杰伦专辑

http://haiyang457.202030.com.cn/mp3.swf 给大家分享个自己制作的周杰伦FLASH歌曲播放器!~ 转载于:https://blog.51cto.com/haiyang457/1122220