HTTPError在使用的urllib2阅读()(HTTPError when using urll

2019-10-18 09:29发布

我试图用刮和的urllib2一个BeautifulSoup网页。 它工作正常,然后当我把在input()在我的代码,试图调试一些不同的组成部分,我得到了引发HTTPError。 当我试图再次运行我的程序,我得到了引发HTTPError当试图调用read()。 错误堆栈是下面:

[2013-07-17 16:47:07,415: ERROR/MainProcess] Task program.tasks.testTask[460db7cf-ff58-4a51-9c0f-749affc66abb] raised exception: IOError()
16:47:07 celeryd.1 | Traceback (most recent call last):
16:47:07 celeryd.1 |   File "/Users/username/folder/server2/venv/lib/python2.7/site-packages/celery/execute/trace.py", line 181, in trace_task
16:47:07 celeryd.1 |     R = retval = fun(*args, **kwargs)
16:47:07 celeryd.1 |   File "/Users/username/folder/server2/program/tasks.py", line 193, in run
16:47:07 celeryd.1 |     self.get_top_itunes_game_by_genre(genre)
16:47:07 celeryd.1 |   File "/Users/username/folder/server2/program/tasks.py", line 244, in get_top_itunes_game_by_genre
16:47:07 celeryd.1 |     game_page = BeautifulSoup(urllib2.urlopen(game_url).read())
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
16:47:07 celeryd.1 |     return _opener.open(url, data, timeout)
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
16:47:07 celeryd.1 |     response = meth(req, response)
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
16:47:07 celeryd.1 |     'http', request, response, code, msg, hdrs)
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
16:47:07 celeryd.1 |     return self._call_chain(*args)
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
16:47:07 celeryd.1 |     result = func(*args)
16:47:07 celeryd.1 |   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
16:47:07 celeryd.1 |     raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
16:47:07 celeryd.1 | HTTPError

下面的代码:

for game_url in urls:    
    game_page = BeautifulSoup(urllib2.urlopen(game_url).read())
    # code to process page

没有人知道为什么,我开始收到此错误? 谢谢!

Answer 1:

改变我的评论到一个答案:

您正在刮页面回应(最有可能)4xx的,而urllib2的提高引发HTTPError,因为它说,它确实在该文档 。 这是你的工作,以捕获该异常和(希望)用它做的东西,记录它或者你有什么。 您回溯不显示代码/原因HTTPError无论出于何种原因,但它的存在。 看看“代码”和错误的“理由”的属性。

编辑观点:这是可能的,你是刮的网站想通了,你是一个机器人。 您可能要花点时间来重写你的刮刀使用更服务器友好(和好得多API)库。 urllib2的是罚款一次性的任务,但它有许多不足之处,我不会进入这里。 可能优于图书馆看是请求 , 机械化 ,也许httplib2的 。 所有有多达/缺点,所以我不能告诉你一个最适合您的需求。

你可能也想看看什么User-Agent头你与你的请求发送,因为如果你的自我认同为一个机器人,很好。 是啊。



文章来源: HTTPError when using urllib2 read()