0

サイトから 5 秒ごとに情報を取得しようとしていますが、機能していないようで、実行するたびにエラーが発生します。

以下のコード:

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()

次のエラーが表示されます。

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

助けていただければ幸いです、ありがとう!

4

3 に答える 3

0

サイトは、urllib2 によって報告されたデフォルトの User-Agent を拒否しています。install_opener を使用して、スクリプト内のすべての要求に対してこれを変更できます。

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)

また、データをサイトごとに分割して、行ごとに読み取る必要があります

urllib2.urlopen('http://forums.zybez.net/runescape-2007-prices').read().splitlines()

変更する

line.split('/runescape-2007-prices/player/'[1])

line.split('/runescape-2007-prices/player/')[1]

働く:

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()
于 2013-10-24T21:18:57.883 に答える
0

スレッドなしでその URL を開こうとしましたか? エラー コードには 403: Forbidden と表示されます。その Web ページには認証が必要な可能性があります。

于 2013-10-24T21:04:09.510 に答える
0

これは Python とは関係ありません。サーバーはその URL へのリクエストを拒否しています。

URL が間違っているか、何らかのレート制限に達してブロックされていると思われます。

編集:それを機能させる方法

このサイトは Python のUser-Agent. これを試して:

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])
于 2013-10-24T21:04:13.700 に答える