网页爬虫抓取百度图片(url向百度发送请求import#需要用这个包进行正则匹配import)
优采云 发布时间: 2022-01-29 22:13网页爬虫抓取百度图片(url向百度发送请求import#需要用这个包进行正则匹配import)
宣布
此文章仅供学习使用,如果读者利用此方法进行违法*敏*感*词*活动,与本人无关。
爬虫已经触犯了法律,因此需要谨慎使用。
下面开始文字
一、导入几个需要用到的包
import requests #需要使用这个包向百度发送请求
import re #需要使用这个包进行正则匹配
import time #Sleep 避免对服务器造成太大压力
这里的requests主要作用是向百度发送请求,也就是模仿人工操作进行访问。有两种方法:post 和 get。这里我们使用get方法。
然后,开始向百度发送请求。当然,你需要一个百度图片的链接。首先,访问百度的图片,看看链接是什么样子的。
url 列如下所示:
皮卡丘
去掉一些不必要的内容后,可以长成这样
皮卡丘
如果你不相信我,你可以试试。
然后分析url,前者肯定是固定格式,不能更改,而后者word=Pikachu显然就是我们搜索的关键词。url就解决了,然后向百度发送请求。代码显示如下:
html = requests.get(url)
html.encoding = html.apparent_encoding #这里可以查看需要爬取的页面的源码,一般是utf-8,但不是全部。
html = html.text #这里需要获取对应的文本,用于后面的正则匹配操作
接下来就是操作源码了。最好对网络前端有所了解。如果没有,至少检查一下源码(最简单的操作是在网址栏前面加上view-source)
一、在源页面搜索jpg(百度图片后缀,先找到图片链接)
只需抓取一个链接并分析它:
{"ObjURL":"http:\/\/\/forum\/pic\/item\/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg","ObjUrl":"http:\/\/\/forum\/pic\ /项目\/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg"
抓取http:\/\/\/forum\/pic\/item\/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg里面,访问一下,发现是可以访问的。又试了几次,发现只有objURL开头的可以访问,而objURL开头的可能无法访问。没关系,先把所有的
"ObjURL":"xxxx"
格式中的所有链接都找到了,这时候就需要使用正则匹配了。代码显示如下:
urls = re.findall('"objURL":"(.*?)"',html,re.S) #这里使用导入的re包
需要注意的是,re.findall匹配的数据是一个列表,需要用for循环逐个访问:
我 = 0
对于网址中的网址:
time.sleep(3) #睡眠3秒
imag = requests.get(url,timeout = 6).content
#timeout表示每个请求最多6秒,否则会卡住
如果想象:
使用 open(str(i) + '.jpg','wb') 作为 f:
print('正在下载第 %d 张图片:%s' %(i + 1,url))
f.write(imag)
我 += 1
别的:
print('链接超时,图片下载失败')
print('图片下载成功')
一个最简单的爬虫已经写好了,但是如果有一点错误就会报错。没有所谓的鲁棒性。如何改进爬虫将在下一篇文章文章中解释。
完整代码如下,大家可以自己体验一下:
导入请求
重新*敏*感*词*
*敏*感*词*时间
url = '皮卡丘'
html = requests.get(url)
html.encoding = html.apparent_encoding
html = html.text
urls = re.findall('"objURL":"(.*?)"',html,re.S)
我 = 0
对于网址中的网址:
time.sleep(3) #睡眠3秒
imag = requests.get(url,timeout = 6).content
#timeout表示每个请求最多6秒,否则会卡住
如果想象:
使用 open(str(i) + '.jpg','wb') 作为 f:
print('正在下载第 %d 张图片:%s' %(i + 1,url))
f.write(imag)
我 += 1
别的:
print('链接超时,图片下载失败')
print('图片下载成功')
注:最后给大家发一套2020年最新的企业级Python项目实战视频教程,点此领取,跟着实践。希望大家一起进步!