鱼C论坛

 找回密码
 立即注册
查看: 2462|回复: 3

[已解决]爬虫爬取中出错

[复制链接]
发表于 2020-2-8 15:42:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下,使用requests库的简陋爬虫

问题描述:当跑代码爬图时,不定时会发生 response爬到了源码,但是之后用正则表达式时,找不到图片地址,导致后续列表操作超出范围而报错。例如有时候 爬到第15张会报错 但再次运行 又可能是在爬取第13张时候报错,甚至再次运行,第3张图的时候就已经报错了。

尝试百度无果,百思不得其解,遂请各位大佬赐教

  1. import random
  2. import requests
  3. import re

  4. list1=['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)','Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11','Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5']

  5. def ua():
  6.     return {'User-Agent':random.choice(list1),'Referer':'https://www.mzitu.com/'}
  7. def delx(a):
  8.     a[0]=a[0][1:-1]
  9.     a[1]=a[1][1:-1]

  10. for i in range(1,66):
  11.     url='https://www.mzitu.com/205723/'+str(i)
  12.     response=requests.get(url,headers=ua()).text
  13.     d=re.findall("img src=(.*) alt="'(.*)'" width",response)
  14.     image_infos=list(d[0])
  15.     delx(image_infos)
  16.     image_content=requests.get(image_infos[0],headers=ua()).content
  17.     with open("image/"+str(i)+'.jpg','wb') as f:
  18.         f.write(image_content)
复制代码
最佳答案
2020-2-8 17:58:05
我试了一下,'User-Agent' 是 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'时,会导致那个图片没有width,但是如果去掉width,可能会有一些其他的图片,所以我建议去掉这个'User-Agent'
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-8 17:38:49 | 显示全部楼层
我在我的电脑上面试了一下,发现报错的页面里img标签没有width,把d=re.findall("img src=(.*) alt="'(.*)'" width",response)里面的‘width’去掉就可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 17:58:05 | 显示全部楼层    本楼为最佳答案   
我试了一下,'User-Agent' 是 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'时,会导致那个图片没有width,但是如果去掉width,可能会有一些其他的图片,所以我建议去掉这个'User-Agent'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 18:18:56 | 显示全部楼层
prophet-1 发表于 2020-2-8 17:58
我试了一下,'User-Agent' 是 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) Apple ...

我万万没想到是UA的问题,感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-3 20:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表