python爬虫之批量下载百度图片

输入想要获取的图片关键词,再输入数量,就可以自动完成下载保存,听起来还是蛮炫酷的,加下来小编就为大家带来自动下载百度图片的网络爬虫

以百度图片为例,搜索关键字,会展示出很多图片,我们试着输入 小猫 吧,F12或者右键检查打开开发者工具,选择网络,点击XHR,刷新页面,不要忘了刷新,如下图

随着页面的下滑,会有很多html类型的文件刷新出来,小编告诉大家,这类文件每一个里面包含30张图片,所以当用户不断向下刷时,每次超过30张就会刷新一个出来

加下来我们分析一下这些文件,随机点一个看看

我们可以看到右侧有一个GET,它是我们这个文件的url地址,有的浏览器会将地址问号?后面的参数(蓝色显示)拆开,其实原理都一样

我们将GET后面的这一串复制下来,打开新的窗口访问

发现浏览器显示的时一串字典格式的文本,我们找到thumbURL,发现共有30个,thumbURL后接的地址就是图片的url,随意访问一个就可以打开图片的源网址,这也是为什么一个前面提到的html会有30张图片的原因。

接下来对GET后的地址进行分析

别看有一堆,大部分都没啥用,有用的小编已经用红圈圈起来了,word后接的是搜索关键词,pn表示此文件能够达到多少数量的照片,它肯定是30的倍数,这很好理解,最后面那个是时间戳(可以理解为记录访问网页时间的),在小编看来,随便生成一个162389开头的13位数字即可

拓展一下,时间戳显示的13位数字表示秒,记录了从1970年1月1日0时0分0秒到现在的秒数,写程序的时候不要差的太多就行,不过小编填0试了一下也是可以的,70年的时候还没有百度呢,哈哈哈,这点还是挺逗的

现在整理一下写代码的思路,首先我们直接访问GET后的url,将三个关键字用format进行引用,word后的关键词为用户输入,pn由用户输入图片数量后对30进行整除再加1即可,时间戳用time函数获得。得到url后,用requests进行访问,用提取字典的方式将thumbURL提取出来,访问thumbURL保存成图片即可。整体的过程还是比较简单的

首先看看获取图片url的代码

import requests
import time
word = input('请输入搜索内容:')
num = input('请输入图片获取数量:')
num = int(num)
number = num // 30 + 1
image_list = []#定义一个空列表,用于存放图片url
for i in range(0,number):
    head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0'}
    new_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7862130338158560106&ipn=rj&ct=201326592&is=&\
    fp=result&queryWord=%E5%B0%8F%E7%8C%AB&cl=&lm=&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&\
    word={}&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&expermode=&nojc=&pn={}&rn=30&gsm=b4&{}='.format(word,i*30,time.time())
    response = requests.get(url=new_url,headers=head)
    for j in range(0, len(response.json()['data']) - 1):#response.json()['data']最后包含一个空的列表元素,在最后面,需要把它减掉,所以要 - 1
        image_list.append(response.json()['data'][j]['thumbURL'])
print(len(image_list))
print(image_list)

和运行后的结果

上述代码演示了获取小猫的55张图,因为用户是可以随意输入数字的,但是网页是以30的倍数进行数量计算,所以,虽然用户输入了55,但是获取到的是60个链接。同理,如果用户输入61,则会存储90个图片链接

接下来就好办了,我们利用一个循环,次数就是用户输入的次数,一个一个提取列表,进行爬取保存

n = 1#用来记数
for i in image_list:
    if n == num + 1:
        break
    res = requests.get(url=i)
    with open (r'C:\USER\Administrator\Desktop\百度图片\{}.jpg'.format(n),'wb') as f:
        f.write(res.content)
        n+=1

小编保存至桌面了,需要提前在桌面上创建一个叫百度照片的文件夹,这个路径大家根据不同的情况自行设置

把两段代码连起来为完整的代码,一定要提前创建文件夹,大家也可以学习os库,可以自动创建文件夹

下面看看效果

百度图片

 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值