Почему я получаю «ERR_ACCESS_DENIED», когда я использую python для открытия URL (Википедия)? - PullRequest
1 голос
/ 06 февраля 2012

это мой первый вопрос, когда-либо размещенный здесь, так что, возможно, я ищу немного жалости к новичку.

Я изучаю Python для своего урока информатики в старшей школе, поэтому у меня мало опыта в его использовании для решения проблем. Сейчас я работаю над тем, что попадает со случайной страницы в Википедии на целевую страницу (также в Вики), следуя ссылкам на каждой странице. Я впервые использую такие вещи, как urllib, поэтому пока использую только то, что мне сказал мой учитель.

У меня есть немного кода, который должен открывать страницы в вики, но я продолжаю придумывать страницу, которая говорит о технической ошибке. Впрочем, открывать Википедию из браузера можно.

Я не знаю, что мне нужно, чтобы заставить его работать, и я больше не знаю, где искать, чтобы понять это.

Мой код (с использованием IDLE в Ubuntu 11.04 с использованием 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())

Мой вывод выглядит так:

('Данные:', '\ n') ('Start:', 'html', [('xmlns', 'http://www.w3.org/1999/xhtml'), (' xml: lang ',' en '), (' lang ',' en ')]) ('Данные:', '\ n') («Начало:», «голова», []) ('Данные:', '\ n') («Начало:», «заголовок», []) («Данные:», «Ошибка Викимедиа») ('Конец:', 'заголовок') ('Данные:', '\ n') ('Start:', 'meta', [('http-equ', 'Content-Type'), ('content', 'text / html; charset = UTF-8')]) («Конец:», «Мета») ('Данные:', '\ n') («Начало:», «мета», [(«имя», «автор»), («контент», «Марк Райан»)]) («Конец:», «Мета») ('Данные:', '\ n') ('Start:', 'meta', [('name', 'copyright'), ('content', '(c) 2005-2007 Mark Ryan и др. Текст под лицензией GNU Free Documentation License. http://www.gnu.org/licenses/fdl.txt')]) («Конец:», «Мета») ('Данные:', '\ n \ n') ('Start:', 'style', [('type', 'text / css')]) ('Данные:', '\ n') («Конец:», «Стиль») ('Данные:', '\ n') («Старт:», «скрипт», []) ('Data:', '// \ n \ tfrings (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 //]]>") («Конец:», «скрипт») ('Данные:', '\ n') («Конец:», «голова») ('Данные:', '\ n \ n') ('Start:', 'body', [('link', '# 24442E'), ('text', '# 000000'), ('vlink', '# 24442E'), ('alink', ' # FF0000' )]) ('Данные:', '\ n') («Начало:», «h1», []) («Данные:», «Фонд Викимедиа») («Конец:», «h1») ('Данные:', '\ n') («Старт:», «скрипт», []) ('Data:', "lines ('ccd4cf bdc3bf adb1af 9ea09f dbe5df');") («Конец:», «скрипт») ('Данные:', '\ n \ n') («Начало:», «h2», []) («Данные:», «Ошибка») («Конец:», «h2») ('Данные:', '\ n \ n') («Старт:», «скрипт», []) ('Data:', "lines ('8f8f8f acacac c6c6c6 dbdbdb eaeaea f4f4f4');") («Конец:», «скрипт») ('Данные:', '\ n \ n') ('Данные:', '\ n') ('Start:', 'div', [('class', 'ContentArea')]) ('Данные:', '\ n \ n') ('Start:', 'div', [('id', 'en'), ('lang', 'en')]) ('Данные:', '\ n') («Начало:», «р», []) («Данные:», «В настоящее время на наших серверах возникла техническая проблема. Вероятно, это временная проблема, которая должна быть исправлена ​​в ближайшее время. Пожалуйста») ('Start:', 'a', [('href', 'http://en.wikipedia.org/wiki/Special:Random'), (' onclick ',' window.location.reload (false); вернуть false ')]) («Данные:», «повторите попытку») («Конец:», «а») («Данные:», «через несколько минут».) («Конец:», «р») ('Данные:', '\ n') («Начало:», «р», []) («Данные:», «Вы можете получить дополнительную информацию в») ('Start:', 'a', [('href', 'irc: //chat.freenode.net/wikipedia')]) («Данные:», «# Википедия») («Конец:», «а») («Данные:», «канал на») ('Start:', 'a', [('href', 'http://www.freenode.net')]) («Данные:», «Сеть Freenode IRC») («Конец:», «а») ('Данные:', '.') («Конец:», «р») ('Данные:', '\ n') («Начало:», «р», []) («Данные:», «Фонд Викимедиа» - это некоммерческая организация, на которой размещены некоторые из самых популярных сайтов в Интернете, в том числе Википедия. Постоянно необходимо приобретать новое оборудование. Если вы хотите помочь, пожалуйста, ) ('Start:', 'a', [('href', 'http://wikimediafoundation.org/wiki/Fundraising')]) («Данные:», «пожертвовать») («Конец:», «а») ('Данные:', '.') («Конец:», «р») ('Данные:', '\ n') ('Start:', 'hr', [('noshade', 'noshade'), ('size', '1px'), ('width', '80% ')]) («Конец:», «Час») ('Данные:', '\ n') ('Start:', 'div', [('class', 'TechnicalStuff')])(«Данные:», «\ nЕсли вы сообщите об этой ошибке системным администраторам Викимедиа, пожалуйста, укажите подробности ниже.») («Пуск:», «br», []) («Конец:», «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, с 112.205.80.8 через sq72.wikimedia.org (squid / 2.7.STABLE9) to () ') (' Start: ',' br ', []) (' End: ',' br ') ('Data:', '\ nError: ERR_ACCESS_DENIED, errno [Нет ошибок] в понедельник, 06 февраля 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') ('Данные:', '\ n \ n') Нет

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Рассмотрите возможность использования фактического API.Попробуйте это:

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

Должен вернуть HTML-документ с текстом статьи.

1 голос
/ 20 февраля 2012

Попробуйте использовать 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")

и не забудьте импортировать библиотеку.Удачи!

0 голосов
/ 10 июня 2012

Убедитесь, что вы подделали свой пользовательский агент.Википедия не любит Python или Perl, поэтому любой пользовательский агент, начинающийся с «lwp» или «python-urllib», получит «временную» «техническую проблему».

Код, предоставленный eviltnan, делает это,Однако он не уточнил, почему он подделал пользовательский агент, поэтому я хотел отметить, что он обычно не нужен при доступе к большинству сайтов, но необходим при доступе к Википедии.

...