Проверка наличия определенных слов на веб-странице с использованием Python? - PullRequest
1 голос
/ 21 ноября 2011

У меня есть список слов, в Python мне нужно перебирать каждое слово и проверять, есть ли это слово на сайте.

В настоящее время это фрагмент того, что у меня есть (относительно этой проблемы):

words = ['word', 'word1', 'word2']
site = urllib.request.urlopen(link)
for word in words:
    if word in site:
       print(word)
    else:
       print(word, "not found")

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

Проблема в том, что я всегда захожу на " слово не найдено", и, кажется, никогда не найти слова на сайте.

Что не так с кодом? Кажется, это ошибка семантики, потому что синтаксис работает нормально, и не выдается никаких исключений (хотя в моем последнем случае у меня есть обработка исключений, но она все равно сообщит, если исключения будут выброшены в любом случае).

Ответы [ 2 ]

7 голосов
/ 21 ноября 2011

Функция urlopen() возвращает «файлоподобный объект». Чтобы прочитать данные , вы должны позвонить read():

site = urllib.request.urlopen(link).read()

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

Причина, по которой ваш код работает так, как написано, заключается в том, что файловый объект также является итеративным, что означает, что его можно использовать с оператором in. Но он делал не то, что хотел.

2 голосов
/ 21 ноября 2011

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

temp = urllib.request.urlopen(link)
HTML = temp.read().decode("utf-8")

это расшифрует ссылку, используя Unicode ссылка не может быть закодирована Unicode. Вы можете узнать кодировку запрашивающей заголовок сайта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...