爬取百度图片(可指定爬取内容与爬取数量)

编程入门 行业动态 更新时间:2024-10-10 15:18:30

爬取百度图片(可指定爬取内容与爬取<a href=https://www.elefans.com/category/jswz/34/1770431.html style=数量)"/>

爬取百度图片(可指定爬取内容与爬取数量)

爬取百度图片(可指定爬取内容与爬取数量)

参考博文:
百度图片爬虫

修改点

1.删去了多线程爬虫,改为通过翻页获取图片地址,将所有图片地址保存到一个大列表中然后再逐个下载

2.修改下载时的头部信息(header),获取图片地址的网址的请求头与下载图片地址网址的请求头信息不同

程序结果:

1.运行结果:

2.爬取图片截图

程序

class BaiDu:"""爬取百度图片过程说明1.通过翻页得到当前页面的所有图片下载地址信息2.将图片下载地址信息汇总3.通过图片下载地址逐一下载并保存图片"""def __init__(self, name, page):self.start_time = time.time()self.name = nameself.page = pageself.url = ''self.header = {'Accept':'application/json, text/javascript, */*; q=0.01','Accept-Encoding':'gzip, deflate, br','Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection':'keep-alive','Cookie':'BIDUPSID=2A5FEE6B2770A0CFD1961E57939FBB0C; PSTM=1550117217; MCITY=-224%3A; BAIDUID=8B463652B7DABD048CA711CB52DBD7A9:FG=1; BDUSS=pYZ044QWhMfmlHeHVncUtOZWR0QWtrU0R6WmlHUk5wMnRRRzZXeFBTa2oxZVpmSVFBQUFBJCQAAAAAAAAAAAEAAAD3j4Sham1sMTM0NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNIv18jSL9faE; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; __yjs_duid=1_1c5a5b680e5e2315adda8390ee0698f51609294273845; ab_sr=1.0.0_NzhjYTJiMTU1ODE1MDRjMDY2ODIxOWEzMzY5NmFhODk5ZWVjODI0M2VkZDJhYjU5ODY3OTYwNGY4ZjdmYjFkOGNiOTEwOWUzYWZhNmY0NmJhYjM1ZWU2YjdkNGQwMzQy; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; BDRCVFR[Tp5-T0kH1pb]=mk3SLVN4HKm; userFrom=null; firstShowTip=1','Host':'image.baidu','Referer':'/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0','X-Requested-With':'XMLHttpRequest'}# 添加为自己的self.num = 0def queryset(self):"""将字符串转换为查询字符串形式"""pn = 0all_links = []for i in range(int(self.page)):pn += 30 * idata = {'word': self.name, 'pn': pn, 'tn':'resultjson_com', 'ipn':'rj', 'rn':30}url = self.urlimg_links = self.getrequest(i,url, data)all_links.extend(img_links)print('所有图片地址保存完毕,正在下载图片...')# 提取url地址并下载图片j = 0for link in all_links:j = j+1#print(link)self.saveimage(link)print('本次共保存{}张图片'.format(j))def getrequest(self, i,url, data):"""发送请求"""#print('[INFO]: 开始发送请求:' + url)ret = requests.get(url, headers=self.header, params=data)if str(ret.status_code) == '200':print('第{}页网址为:'.format(i+1) + ret.url)else:print('[INFO]: request {}, {}'.format(ret.status_code, ret.url))response = ret.content.decode()img_links = re.findall(r'thumbURL":"(.*?\.jpg)', response)return img_linksdef saveimage(self, link):"""保存图片"""m = hashlib.md5()m.update(link.encode())name = m.hexdigest()header = {#(.*?):(.*)#'($1)' : '($2)',#请求头输入'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding':'gzip, deflate, br','Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection':'keep-alive','Host':'ss3.bdstatic','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',}ret = requests.get(link, headers = header)image_content = ret.contentfilename = r'.//image//' +name + '.jpg'with open(filename, 'wb') as f:f.write(image_content)#print('[INFO]:保存成功,图片名为:{}.jpg'.format(name))def __del__(self):end_time = time.time()print('一共花费时间:{}(单位秒)'.format(end_time - self.start_time))def main():name = input('请描述你要爬取的图片: ')page = input('请输入你要爬取图片的页数(30张一页):')baidu = BaiDu(name, page)baidu.queryset()if __name__ == '__main__':main()

程序简单说明

1.如何实现自动翻页

在百度中是没有翻页键的,而是通过向下滑动自动刷新,所以判断为Ajax

  • 1.1在火狐浏览器中 :鼠标右键》》选择元素》》点击网络》》点击XHR筛选》》将浏览器页面向下滑动获取更多图片》》查看新增的页面 不同页面的网址就相当于翻页了

  • 1.2比较多个网址信息,发现rn代表传输多少数据,最大为60,pn代表从第几个数据开始,word表示搜索对搜索图片的描述,所以获取网址传输时需携带的参数设计为:
    data = {‘word’: self.name, ‘pn’: pn, ‘tn’:‘resultjson_com’, ‘ipn’:‘rj’, ‘rn’:30}

  • 1.3将参数加入请求中,然后通过改变参数来实现翻页的效果。具体实现请看程序

2.如何获取图片地址
  • 2.1查看当前页面的响应数据,发现响应数据中图片地址如下,且每个请求中有30条图片下载地址数据
  • 2.2通过正则表达式,获取当前页面的所有图片地址,正则表达式实现如下:
    img_links = re.findall(r’thumbURL":"(.*?.jpg)’, response)
  • 2.3将所有图片下载地址汇总

更多推荐

爬取百度图片(可指定爬取内容与爬取数量)

本文发布于:2024-02-27 17:37:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707581.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数量   内容   图片

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!