2012-06-11 104 views
-2

我遇到问题使用python访问网页 - 它抛出一个HTTP错误403.浏览堆栈溢出后,我发现许多其他用户遇到相同的错误,并通过更改请求的头部来纠正它。我试过但仍然收到错误。Python Web请求错误403

这里是我的代码:

req = urllib2.Request("http://www.mozilla.org") 
req.add_header('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8a3) Gecko/20040817') 

try: 
    response = urllib2.urlopen(req) 
except urllib2.URLError, (err): 
    print "URL error(%s)" % (err) 

编辑:这里是我的代码,一个网络爬虫它开始一个更大的块。另外 - 我一直在使用http://www.mozilla.org作为我的测试网址,虽然它似乎不适用于任何其他网址,如谷歌和雅虎。

#!/usr/bin/python 

import sys 
import urllib2 
import urlparse 
tocrawl = set([sys.argv[1]]) 
crawled = set([]) 

while 1: 
    try: 
     crawling = tocrawl.pop() 
     print 'Crawling: ', crawling 
    except KeyError: 
     print 'No more to crawl!' 
     raise StopIteration 

    url = urlparse.urlparse(crawling) 
    print 'Url parse returned ', url 

    req = urllib2.Request(crawling) 
    req.add_header('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8a3) Gecko/20040817') 
    print 'header: ', req.get_header('User-agent') 

    try: 
     print 'test' 
     response = urllib2.urlopen(req) 
     print 'test2' 
     print 'response: ', response 
    except urllib2.URLError, (err): 
     print "URL error(%s)" % (err) 
     continue 

    msg = response.read() 
+2

你确实试图取http://www.mozilla.org吗?因为你的代码适合我。如果没有,那么很难说没有你想要获取的URL。 – jedwards

+0

我无法重现您的结果。你能分享更多可能导致问题的代码吗?在响应的主体中是否还有错误消息? – Trevor

回答

0

固定。问题是我没有设置必要的代理。感谢您的回应。

我添加了下面的代码片段来修复。

proxy_info = urllib2.ProxyHandler({'http' : "proxy:80"}) 
opener = urllib2.build_opener(proxy_info) 
urllib2.install_opener(opener)