首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python + urllib2代码错误

python + urllib2代码错误
EN

Stack Overflow用户
提问于 2013-10-24 21:00:45
回答 3查看 138关注 0票数 0

我一直在尝试从一个网站中提取信息,但它似乎不起作用,而且每次运行它时我都会出错。

代码如下:

代码语言:javascript
复制
import urllib2, threading
def readpage():
    data = urllib2.urlopen('http://forums.zybez.net/runescape-2007-prices').read()
    for line in data:
        if 'forums.zybez.net/runescape-2007-prices/player/' in line:
            a = line.split('/runescape-2007-prices/player/'[1])
            print(a.split('">')[0])

t = threading.Timer(5.0, readpage)
t.start()

我知道这些错误:

代码语言:javascript
复制
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 808, in __bootstrap_inner
    self.run()
  File "C:\Python27\lib\threading.py", line 1080, in run
    self.function(*self.args, **self.kwargs)
  File "C:\Users\Jordan\Desktop\username.py", line 3, in readpage
    data = urllib2.urlopen('http://forums.zybez.net/runescape-2007-prices').rea
()
  File "C:\Python27\lib\urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden

非常感谢您的帮助,谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-24 21:18:57

站点正在拒绝urllib2报告的默认用户代理。您可以使用install_opener对脚本中的所有请求进行更改。

代码语言:javascript
复制
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0')]
urllib2.install_opener(opener)

您还需要通过站点将数据拆分,逐行读取数据

代码语言:javascript
复制
urllib2.urlopen('http://forums.zybez.net/runescape-2007-prices').read().splitlines()

和改变

代码语言:javascript
复制
line.split('/runescape-2007-prices/player/'[1])

代码语言:javascript
复制
line.split('/runescape-2007-prices/player/')[1]

工作:

代码语言:javascript
复制
import urllib2, threading

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0')]
urllib2.install_opener(opener)

def readpage():
    data = urllib2.urlopen('http://forums.zybez.net/runescape-2007-prices').read().splitlines()
    for line in data:
        if 'forums.zybez.net/runescape-2007-prices/player/' in line:
            a = line.split('/runescape-2007-prices/player/')[1]
            print(a.split('">')[0])

t = threading.Timer(5.0, readpage)
t.start()
票数 0
EN

Stack Overflow用户

发布于 2013-10-24 21:04:09

你试过在没有线的情况下打开那个网址吗?错误代码写着403:禁用,也许您需要对该网页进行身份验证。

票数 0
EN

Stack Overflow用户

发布于 2013-10-24 21:04:13

这与Python无关--服务器拒绝您对该URL的请求。

我怀疑要么URL是不正确的,要么你已经达到某种速率限制,并被封锁。

编辑:如何使其工作

这个站点阻塞了Python的User-Agent。试试这个:

代码语言:javascript
复制
import urllib2, threading
def readpage():

    headers = { 'User-Agent' : 'Mozilla/5.0' }
    req = urllib2.Request('http://forums.zybez.net/runescape-2007-prices', None, headers)
    data = urllib2.urlopen(req).read()

    for line in data:
        if 'forums.zybez.net/runescape-2007-prices/player/' in line:
            a = line.split('/runescape-2007-prices/player/'[1])
            print(a.split('">')[0])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19576566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档