python爬取图片

一、网页分析:

我们爬取某网站图片时总是爬取不到所有的图片,只会爬取到一页的内容,这是为什么呢?

原因就是该网页提供的html页面使用了Ajax与javascript的交互实现,因此我们爬取时有困难。
在后几篇文章中会介绍,今天我们给出某网站爬取图片的网址:

https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E7%8C%AB&pn=0&gsm=50&ct=&ic=0&lm=-1&width=0&height=0
https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E7%8C%AB&pn=20&gsm=3c&ct=&ic=0&lm=-1&width=0&height=0
https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E7%8C%AB&pn=40&gsm=50&ct=&ic=0&lm=-1&width=0&height=0

上面的url分别是第1页、第2页、第3页的,我们还是用老方法先得到这些url,
然后再获取每页的图片。

二、获取每页的url

我们的目的不是获取某一类的图片,而是获取我们想要的任何种类,任何数量的图片,所以我们可以对url进行拼接。通过输入想要的内容达到目的。

获取我们想要的种类图片:picture = input("图片类型为:\n")
获取每页的url:pn = 20*(i-1)
把上面的两个键值对存储在字典kw里,在我们发送get请求时传入即可。

正则表达式获取我们下载图片的内容:
“objURL”:“(.*?)”
在这里插入图片描述
符合该表达式的内容有61个,通过分析,第一个是没用的。

所以剩下的60个就是我们所需图片的内容,我们找到对应的链接,查看是否可以得到相应的图片内容,答案是肯定的。
但是我们又发现一个问题:第1、2、3;第4、5、6;……每三个objurl的链接获取到的内容一样(即步长为3),所以为了避免重复,我们只获取pn=0,pn=60,pn=120……这些链接的内容即可。

以上我们就获取到了所有我们想要每个图片的url。

import requests
import re
picture = input("图片类型为:\n")
headers = {
   
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宝儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值