鱼C论坛

 找回密码
 立即注册
查看: 7411|回复: 26

刚学到爬虫XXOO,遇到403forbidden

[复制链接]
发表于 2015-9-3 11:25:35 | 显示全部楼层 |阅读模式

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

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

x
下面是代码,跟着小甲鱼编的,已经添加header了,不知道为什么煎蛋还是把我禁了  难道要用代理??
请问怎么解决~??

  1. import urllib.request
  2. import os

  3. def url_open(url):
  4.     req = urllib.request.Request(url)
  5.     req.add_header(\'User-Agent\',\'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\')
  6.     response = urllib.request.urlopen(url)
  7.     html = response.read()

  8.     return html
  9.    
  10. def get_page(url):
  11.     html = url_open(url).decode(\'utf-8\')
  12.    
  13.     a = html.find(\'current-comment-page\') + 23
  14.     b = html.find(\']\',a)

  15.     return html[a:b]
  16.                   
  17.    
  18. def find_imgs(url):
  19.     html = url_open(url).decode(\'utf-8\')
  20.     img_addrs = []

  21.     a = html.find(\'img src=\')

  22.     while a != -1:
  23.         b = html.find(\'.jpg\',a,a +255)
  24.         if b !=-1:
  25.             img_addrs.append(html[a+9:b+4])
  26.         else:
  27.             b = a +9
  28.             
  29.         a = html.find(\'img src=\',b)

  30.     return img_addrs
  31.    
  32. def save_imgs(folder, img_addrs):
  33.     for each in img_addrs:
  34.         filename = each.split(\'/\')[-1]
  35.         with open(filename,\'wb\') as f:
  36.             img =url_open(each)
  37.             f.write(img)

  38.    
  39. def download_mm(folder=\'OOXX\',pages=10):
  40.     os.mkdir(folder)
  41.     os.chdir(folder)

  42.     url = \'http://jandan.net/ooxx/\'
  43.     page_num = int(get_page(url))

  44.     for i in range(pages):
  45.         page_num -= i
  46.         page_url = url + \'page-\' + str(page_num) + \'#comments\'
  47.         img_addrs = find_imgs(page_url)
  48.         save_imgs(img_addrs)

  49. if __name__ == \'__main__\':
  50.     download_mm()
复制代码

这是错误信息:
Traceback (most recent call last):
  File \"C:/Python34/testpython/爬煎蛋的妹纸.py\", line 60, in <module>
    download_mm()
  File \"C:/Python34/testpython/爬煎蛋的妹纸.py\", line 51, in download_mm
    page_num = int(get_page(url))
  File \"C:/Python34/testpython/爬煎蛋的妹纸.py\", line 13, in get_page
    html = url_open(url).decode(\'utf-8\')
  File \"C:/Python34/testpython/爬煎蛋的妹纸.py\", line 7, in url_open
    response = urllib.request.urlopen(url)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 161, in urlopen
    return opener.open(url, data, timeout)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 469, in open
    response = meth(req, response)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 579, in http_response
    \'http\', request, response, code, msg, hdrs)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 507, in error
    return self._call_chain(*args)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 441, in _call_chain
    result = func(*args)
  File \"C:\\Python34\\lib\\urllib\\request.py\", line 587, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
来源: 刚学到爬虫XXOO,遇到403forbidden
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-9-5 06:47:07 | 显示全部楼层
煎蛋是啥。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-5 11:26:34 | 显示全部楼层
有没有找到原因了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-8 11:09:03 | 显示全部楼层
这是因为煎蛋貌似被墙了的原因,我这儿访问经常是访问不了,不知是不是爬煎蛋太多被禁IP了。。。用代理能上,顺便打下广告,可以参考下我的:http://bbs.fishc.com/thread-64578-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-8 19:19:33 | 显示全部楼层
user-agent 后面设置为 “your agent string” 试试看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-18 11:57:27 | 显示全部楼层
我的是发生下面的错误
  1. TimeoutError: [Errno 110] Connection timed out

  2. During handling of the above exception, another exception occurred:
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-18 19:10:51 | 显示全部楼层
什么是爬虫XXOO
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-23 00:59:07 | 显示全部楼层
这个问题我也遇到了!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-28 13:39:12 | 显示全部楼层
把第7行response = urllib.request.urlopen(url)改为response = urllib.request.urllopen(req)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-4 16:42:54 | 显示全部楼层
搞代理吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-15 01:16:13 | 显示全部楼层
:shock::shock::shock:
  1. urllib.request.urlopen(url)
复制代码
:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-18 16:18:20 | 显示全部楼层
我也遇到了,用代理就没事,但用代理还碰运气:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-22 23:14:38 | 显示全部楼层
楼主不知道你解决没有,我抓包看了下,这个视频里将的代码根本没有把head替换掉,还是python3.5的head,我用urllib.request.Request(url,headers)可以解决这个报错,但是在接下来的html = response.read().decode("utf-8") 这句报错,说编码不能解析,不知道楼主有没有遇到这样的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-23 17:29:38 | 显示全部楼层
cainiao1th 发表于 2015-10-28 13:39
把第7行response = urllib.request.urlopen(url)改为response = urllib.request.urllopen(req)

为什么要改为req
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-21 17:16:52 | 显示全部楼层
改成req确实过了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-12 22:37:03 | 显示全部楼层
user_agent的值把数字部分放几个随机数,就可以了 我遇到了 我就把浏览器的版本号随机值
我怀疑煎蛋 user_agent 也是一个判断是不是同一个访问的条件,所以只要让它总是变就行,哪怕是一点一点的小变化
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-12 22:37:34 | 显示全部楼层
另外补充一下 还可以降低爬取速度  sleep 一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-16 18:59:51 | 显示全部楼层
同样遇到了这个问题,怎么改都不行。。。就是error
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-17 16:30:29 | 显示全部楼层

看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-30 16:56:16 | 显示全部楼层
cainiao1th 发表于 2015-10-28 13:39
把第7行response = urllib.request.urlopen(url)改为response = urllib.request.urllopen(req)

我改成这个以后又出现了别的错误,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-17 10:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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