python爬虫爬图片用的正则表达式_Python爬虫新手入门(四)爬虫之正则表达式实战(爬取图片)...

目录:

一、得到要爬取的url

二、拿到网页源码

三、得到图片链接

四、保存图片

五、拓展

在上一篇文章我们介绍了正则表达式的用法,这次就来实际操作一下正则表达式。

这次要爬取的是百度图片,我们应该有一个大概的思路:得到要爬取的url、拿到网页源码(我们需要的信息链接就在网页源码中)、得到图片链接、保存图片。在做这些工作之前,我们要先导入需要的第三方库requests和re,通过import来导入。

import requests

import re

下面就开始正式的爬取图片。

一、得到要爬取的url

需求:爬取一些桥梁的图片

百度搜索关键字“桥梁”,可以得到url地址如下:

url = 'https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C7%C5%C1%BA&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111'

可以看到所有图片要通过不断的下滑来呈现,无法进行翻页操作。这是因为它们属于瀑布流的数据,我们可以通过把url地址中的index改成flip,就能实现翻页操作,以便后续的图片爬取。

进行一下刷新,发现url发生了变化,加入了pn=0和ie=utf-8等新元素。这才是真正的url地址。

其中的word=后面的内容是进行了编码的关键字桥梁。具体的操作可以看我之前对关键字编码的讲解:Python爬虫新手入门(一)了解爬虫!

url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E6%A1%A5%E6%A2%81&pn=0&gsm=50&ct=&ic=0&lm=-1&width=0&height=0'

二、拿到网页源码

这一块我们并不陌生,只需进行简单的get请求即可,唯一需要注意的是要带上请求头。

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'

}

r = requests.get(url,headers=headers)

ret = r.text

三、得到图片链接

通过网页解析能够发现,我们需要的图片链接应是这样的形式:

"objURL":"http://dingyue.nosdn.127.net/9r1mlJfhmtyPyr4YbaVWZL8zeF09WY0mVHGS7OD6NAyZR1552887931390compressflag.jpeg"

一张图片对应有四个链接:“thumbURL”,“middleURL”,“hoverURL”,“objURL”。我们需要的是实际大小的图片,而前面三个链接均不是实际大小,因此每张图的链接应是以"objURL"开头的。

以第一页图片为例,爬取第一页的图片链接:

# 获取所有类似"objURL"的图片链接

result = re.findall(r'"objURL":"(.*?)"',ret)

四、保存图片

保存图片,以序号.jpg这样的形式保存

如果爬取前10张图片(每页有60张图片):

for i in range(10):

with open('img/{}.jpg'.format(i),'wb') as f:

r = requests.get(result[i-1])

f.write(r.content)

这就是运行后的结果

个别图片可以通过修改后缀名之后打开。

至此,我们想要爬取的桥梁图片就完成了。

五、拓展

前面我们发现第一页url如下:

url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E6%A1%A5%E6%A2%81&pn=0&gsm=50&ct=&ic=0&lm=-1&width=0&height=0'

如果要爬取第二页,url地址变为:

url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E6%A1%A5%E6%A2%81&pn=20&gsm=3c&ct=&ic=0&lm=-1&width=0&height=0'

可以发现页码是满足一定的数量关系,pn =(i-1)*20,i表示第i页。

我们如果想要爬取多页的图片,就可以把初始url设置成可填充项,将可变参数进行格式化传参即可。

我们在平时经常会用到正则表达式,从中筛选想要的数据,这是一个比较快捷的方法。当然,筛选数据还有更多的方法,这也会在我后面的文章中继续介绍。

最近在知乎创建了一个新的Python技术圈子,在里面每天都会分享好玩有趣的Python知识,你如果对Python这门技术感兴趣的可以加入哦!交个朋友Python技术 - 知乎​www.zhihu.comv2-7d08d26c10e071632b779e6221d5e376_ipico.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值