Почему текст, полученный со страниц, иногда выглядит как бред? - PullRequest
2 голосов
/ 25 ноября 2011

Я использую urllib и urllib2 в Python для открытия и чтения веб-страниц, но иногда текст, который я получаю, нечитаем. Например, если я запускаю это:

import urllib

text = urllib.urlopen('http://tagger.steve.museum/steve/object/141913').read()
print text

Я получил нечитаемый текст. Я прочитал эти сообщения:

Тарабарщина от урлопена

Python urllib2 автоматически распаковывает данные gzip, извлеченные с веб-страницы?

но, похоже, не могу найти мой ответ.

Заранее благодарю за помощь!


ОБНОВЛЕНИЕ: я исправил проблему, убедив сервер в том, что мой пользовательский агент является браузером, а не сканером.

import urllib

class NewOpener(urllib.FancyURLopener):
  version = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.120 Chrome/15.0.874.120 Safari/535.2'

nop = NewOpener()
html_text = nop.open('http://tagger.steve.museum/steve/object/141913').read()

Спасибо всем за ваши ответы.

Ответы [ 2 ]

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

Этот бред является реальным ответом сервера на запрос к 'http://tagger.steve.museum/steve/object/141913'. На самом деле это выглядит как запутанный JavaScript, который при запуске браузером загружает содержимое страницы.

Чтобы получить этот контент, вам нужно выполнить этот JavaScript, и это может быть действительно трудной задачей в Python. Если вы все еще хотите это сделать, посмотрите на pywebkitgtk.

1 голос
/ 25 ноября 2011

Вы можете использовать Selenium для получения контента.Скачайте драйверы для сервера и клиента, запустите сервер и запустите:

from selenium import selenium
s = selenium("localhost", 4444, "*chrome", "http://tagger.steve.museum")
s.start()

s.open("/steve/object/141913")

text = s.get_html_source()
print text
...