鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 夏夜夏月

刚学到爬虫XXOO,遇到403forbidden

[复制链接]
发表于 2016-7-5 20:32:33 | 显示全部楼层
我照搬的代码,为什么出现的是别的错误?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-8 20:32:45 | 显示全部楼层
咸水甲鱼 发表于 2016-7-5 20:32
我照搬的代码,为什么出现的是别的错误?

米兔啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-2 18:41:26 | 显示全部楼层
me too啊什么问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-5 12:10:37 | 显示全部楼层

req = urllib.request.Request(url)
req.add_header('xxx', 'xxx')
response = urllib.request.urlopen(req)
上面三句与下面这一句是等效的
response = urllib.request.urlopen(url)
之所以用上面三句是为了伪装成浏览器模式,直接用下面那个是无法伪装的。我在爬取的过程中遇到这个问题时修改之后就能爬取很多张了,不伪装只能爬取118张。课程视频里有讲。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-19 14:03:01 | 显示全部楼层
1.通过pass排除检测的方法,我发现只有在save的那个步骤会出现403错误,那么只要对这个地方作出修改就行了。
2.我单独一张一张的下的方式测试了下,发现是随机403,也就是按个10次8次总有几次能过。
3.我试过代理,也试过随机user-agent,发现都不能有效解决这个问题,不知道是不是别的什么地方被检测出来。
4.综上,既然怎么伪装都不行,那么就按照2步骤来,只要报错的图就重新下,按照这个思路用
  1. success = False
  2. while not success:
  3.     try:
  4.         with open(filename,'wb') as f:
  5.             img = url_open(each)
  6.             f.write(img)
  7.         success = True   
  8.         #这里你可以自己加一些如time.sleep()的参数,或者print('something')来查验进度
  9.     except:pass
复制代码

重复错误部分的下载,实测虽然耗时会长了一些,除了一张疑是广告的图片下载不了之外,其他都可以下载了。
5.对第3点提到的问题,我个人有几点猜想:①可能需要一个完整的头信息,②顺序下图的模式有可能被判为爬虫,③多次试验下载同一个图导致被服务器判定为爬虫。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-11 15:41:48 | 显示全部楼层
我也遇到了这个问题,按照楼上说的,把第七行括号里面的url改成req就正常运行了。
req应该是经过header伪装的,而url还没有。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-13 11:48:13 | 显示全部楼层
学习学习!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-17 11:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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