私はPythonを使ってURL(Wikipedia)を開くと、どうして "ERR_ACCESS_DENIED"になるのですか?

これは私の初めての質問で、ここに掲載されているので、初心者のために少しの同情を探しているかもしれません。

私は高校のコンピュータ・サイエンス・クラスのためにPythonを学んでいるので、問題を解決するためにそれを使用する経験はほとんどありません。今、私はWikipediaのランダムなページから各ページのリンクをたどって、対象となるページ(Wikiでも)になるものに取り組んでいます。 urllibのようなものを使うのはこれが初めてのことなので、私は先生が使ってくれたことを今まで使っています。

私はWikiのページを開くことができるはずのコードを少し持っていますが、私は技術的なエラーについて何か言っているページを用意しています。しかし、Wikipediaをブラウザから開くのは問題ありません。

私はそれを働かせるために何が必要なのか分からず、これを理解するためにどこを見なければならないのか分かりません。

私のコード(Ubuntu 11.04でIDLEをPython 2.7を使用して使用):

import urllib
import HTMLParser

class Parser(HTMLParser.HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start:", tag, attrs)

    def handle_endtag(self, tag):
        print("End:", tag)
    def handle_data(self, data):
        print ("Data:", data)

#proxy = {"http": "http://10.102.0.3:3128"}
browser = urllib.FancyURLopener()#(proxies = proxy)
    #The commented-out stuff is for the proxy at school.
    #Both at home and at school, I come up with errors.
f = browser.open("http://en.wikipedia.org/wiki/Special:Random")
p = Parser()
print p.feed(f.read())

私の出力は次のようになります。

('Data:', '\n') ('Start:', 'html', [('xmlns', 'http://www.w3.org/1999/xhtml'), ('xml:lang', 'en'), ('lang', 'en')]) ('Data:', '\n') ('Start:', 'head', []) ('Data:', '\n') ('Start:', 'title', []) ('Data:', 'Wikimedia Error') ('End:', 'title') ('Data:', '\n') ('Start:', 'meta', [('http-equiv', 'Content-Type'), ('content', 'text/html; charset=UTF-8')]) ('End:', 'meta') ('Data:', '\n') ('Start:', 'meta', [('name', 'author'), ('content', 'Mark Ryan')]) ('End:', 'meta') ('Data:', '\n') ('Start:', 'meta', [('name', 'copyright'), ('content', '(c) 2005-2007 Mark Ryan and others. Text licensed under the GNU Free Documentation License. http://www.gnu.org/licenses/fdl.txt')]) ('End:', 'meta') ('Data:', '\n\n') ('Start:', 'style', [('type', 'text/css')]) ('Data:', '\n') ('End:', 'style') ('Data:', '\n') ('Start:', 'script', []) ('Data:', '//\n\tfunction lines(s) {\n\t\tvar c = s.split(\' \');\n\t\tfor (var i = 0; i < c.length; i++) {\n\t\t\tdocument.write(\'') ('End:', 'div') ('Data:', "');\n\t\t}\n\t}\n//]]>") ('End:', 'script') ('Data:', '\n') ('End:', 'head') ('Data:', '\n\n') ('Start:', 'body', [('link', '#24442E'), ('text', '#000000'), ('vlink', '#24442E'), ('alink', '#FF0000')]) ('Data:', '\n') ('Start:', 'h1', []) ('Data:', 'Wikimedia Foundation') ('End:', 'h1') ('Data:', '\n') ('Start:', 'script', []) ('Data:', "lines('ccd4cf bdc3bf adb1af 9ea09f dbe5df');") ('End:', 'script') ('Data:', '\n\n') ('Start:', 'h2', []) ('Data:', 'Error') ('End:', 'h2') ('Data:', '\n\n') ('Start:', 'script', []) ('Data:', "lines('8f8f8f acacac c6c6c6 dbdbdb eaeaea f4f4f4');") ('End:', 'script') ('Data:', '\n\n') ('Data:', '\n') ('Start:', 'div', [('class', 'ContentArea')]) ('Data:', '\n\n') ('Start:', 'div', [('id', 'en'), ('lang', 'en')]) ('Data:', '\n') ('Start:', 'p', []) ('Data:', 'Our servers are currently experiencing a technical problem. This is probably temporary and should be fixed soon. Please ') ('Start:', 'a', [('href', 'http://en.wikipedia.org/wiki/Special:Random'), ('onclick', 'window.location.reload(false); return false')]) ('Data:', 'try again') ('End:', 'a') ('Data:', ' in a few minutes.') ('End:', 'p') ('Data:', '\n') ('Start:', 'p', []) ('Data:', 'You may be able to get further information in the ') ('Start:', 'a', [('href', 'irc://chat.freenode.net/wikipedia')]) ('Data:', '#wikipedia') ('End:', 'a') ('Data:', ' channel on the ') ('Start:', 'a', [('href', 'http://www.freenode.net')]) ('Data:', 'Freenode IRC network') ('End:', 'a') ('Data:', '.') ('End:', 'p') ('Data:', '\n') ('Start:', 'p', []) ('Data:', 'The Wikimedia Foundation is a non-profit organisation which hosts some of the most popular sites on the Internet, including Wikipedia. It has a constant need to purchase new hardware. If you would like to help, please ') ('Start:', 'a', [('href', 'http://wikimediafoundation.org/wiki/Fundraising')]) ('Data:', 'donate') ('End:', 'a') ('Data:', '.') ('End:', 'p') ('Data:', '\n') ('Start:', 'hr', [('noshade', 'noshade'), ('size', '1px'), ('width', '80%')]) ('End:', 'hr') ('Data:', '\n') ('Start:', 'div', [('class', 'TechnicalStuff')]) ('Data:', '\nIf you report this error to the Wikimedia System Administrators, please include the details below.') ('Start:', 'br', []) ('End:', 'br') ('Data:', '\n') ('End:', 'div') ('Data:', '\n') ('Start:', 'div', [('class', 'TechnicalStuff')]) ('Data:', '\n') ('Start:', 'bdo', [('dir', 'ltr')]) ('Data:', '\nRequest: GET http://en.wikipedia.org/wiki/Special:Random, from 112.205.80.8 via sq72.wikimedia.org (squid/2.7.STABLE9) to ()') ('Start:', 'br', []) ('End:', 'br') ('Data:', '\nError: ERR_ACCESS_DENIED, errno [No Error] at Mon, 06 Feb 2012 11:58:50 GMT\n') ('End:', 'bdo') ('Data:', '\n') ('End:', 'div') ('Data:', '\n') ('End:', 'div') ('Data:', '\n\n') ('End:', 'div') ('Data:', '\n') ('Start:', 'script', []) ('Data:', "lines('9ea09f adb1af bdc3bf ccd4cf');") ('End:', 'script') ('Data:', '\n\n') ('End:', 'body') ('Data:', '\n') ('End:', 'html') ('Data:', '\n\n') None

1

3 答え

urllib2 を使用して、このようなヘッダーを追加してみてください。少なくとも403を得ることはありません))そしてあなたの場合

 opener = urllib2.build_opener()
 opener.addheaders = [('User-agent', 'Mozilla/5.0')]
 f = opener.open("http://en.wikipedia.org/wiki/Special:Random")

の代わりに

f = browser.open("http://en.wikipedia.org/wiki/Special:Random")

ライブラリをインポートすることを忘れないでください。がんばろう!

1
追加された

実際のAPIの使用を検討してください。 これを試して:

import urllib2
urllib2.urlopen("http://en.wikipedia.org//w/api.php?action=parse&format=txt&page=**Your_Page_Here**&prop=text"

それは記事のテキストのHTML文書を返すべきです。

1
追加された

あなたのユーザーエージェントを偽造していることを確認してください。 WikipediaはPythonやPerlを好まないので、 "lwp"または "python-urllib"で始まるUser-Agentは "一時的な" "技術的な問題"を引き起こします。

eviltnanが提供するコードはこれを行います。しかし、なぜ彼がユーザーエージェントを偽造したのかはっきりとは分かっていなかったので、ほとんどのサイトにアクセスするときは通常は必要ないが、Wikipediaにアクセスするときには必要であることを指摘したい。

0
追加された
あなたはおそらくこれを@ eviltnanの答えにコメントしなければなりません。余分な答えではありません。
追加された 著者 Brighid McDonnell,