Невозможно создать суп из статьи Guardian, полученной с помощью urllib2.urlopen - PullRequest
1 голос
/ 30 марта 2012

Я почему-то не могу создать суп из статьи Guardian, которую я загружаю с помощью urllib2.urlopen (), когда тот же код работает с другим URL. Вот мой код:

import urllib2
from bs4 import BeautifulSoup

url = 'http://www.guardian.co.uk/sport/2012/mar/29/jessica-ennis-london-2012'
myfile = urllib2.urlopen(url)
data = myfile.read()
soup = BeautifulSoup(data)

, которая вызывает следующую ошибку:

Traceback (последний вызов был последним): File "/home/myhome/workspace/guardiangrep/testing.py", строка 13, в суп = файл BeautifulSoup (data) "/usr/lib/python2.7/site-packages/beautifulsoup4-4.0.2-py2.7.egg/bs4/init.py", строка 168, в init Файл self._feed () "/usr/lib/python2.7/site-packages/beautifulsoup4-4.0.2-py2.7.egg/bs4/init.py", строка 181, в _feed Файл self.builder.feed (self.markup) "/usr/lib/python2.7/site-packages/beautifulsoup4-4.0.2-py2.7.egg/bs4/builder/_htmlparser.py", строка 133, в корме parser.feed (разметка) Файл "/usr/lib/python2.7/HTMLParser.py", строка 108, в фиде self.goahead (0) Файл "/usr/lib/python2.7/HTMLParser.py", строка 148, в goahead k = self.parse_starttag (i) Файл "/usr/lib/python2.7/HTMLParser.py", строка 229, в parse_starttag endpos = self.check_for_whole_start_tag (i) Файл "/usr/lib/python2.7/HTMLParser.py", строка 304, в check_for_whole_start_tag Файл self.error («неправильно сформированный начальный тег») «/usr/lib/python2.7/HTMLParser.py», строка 115, ошибка поднять HTMLParseError (message, self.getpos ()) HTMLParser.HTMLParseError: неверно сформированный начальный тег, строка 3025, столбец 16

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

headers = myfile.info()
print headers

Я получаю

Сервер: Apache X-GU-jas: 05-1559 Варьируется: Accept-Encoding, User-Agent X-GU-gen-jas: 05 Content-Type: text / html; charset = UTF-8 P3P: CP = "CAO КУРА АДМА ДЕВА ТАЙЯ ПСАА ПСДА ИВАА ИВДА КОНА ТЕЛА НАШ ИНД ОНЛИ ЮНИ PURi NAV STA PRE LOC "Дата: Пт, 30 марта 2012 09:10:54 GMT X-GU-PageRenderer: DefaultPageRenderer Keep-Alive: время ожидания = 5, макс = 70 Кодирование передачи: chunked X-GU-tm: 01 Content-Language: en-US Подключение: закрыть X-GU-httpd: 05

Любая помощь наиболее ценится.

редактирование: Возвращение к BeautifulSoup 3, кажется, исправляет проблему. Непонятные!

1 Ответ

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

Я получил следующий ответ по другим каналам от Леонарда Ричардсона. Это решило мою проблему

Вы используете встроенный в Python класс синтаксического анализатора HTMLParser, который не так снисходителен, как встроенный SGMLParser, используемый в Beautiful Soup 3.

Встроенный HTMLParser становится более мягким, начиная с Python 2.7.3 и Python 3.2.2, но самое простое решение - установить внешнюю библиотеку синтаксического анализа. Либо lxml, либо html5lib должны иметь возможность анализировать этот документ.

Это объясняется здесь:

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

...