网页爬虫抓取百度图片(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项目实战视频教程,点此领取,跟着实践。希望大家一起进步!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线