это мой первый вопрос, когда-либо размещенный здесь, так что, возможно, я ищу немного жалости к новичку.
Я изучаю 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') Нет