1

当相同的代码适用于另一个 url 时,我不知何故无法从我使用 urllib2.urlopen() 获取的 Guardian 文章中创建汤。这是我的代码:

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)

这会触发以下错误:

回溯(最近一次调用最后):文件“/home/myhome/workspace/guardiangrep/testing.py”,第 13 行,soup = BeautifulSoup(数据)文件“/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/初始化.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(markup) 文件中“/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("malformed start tag") 文件 "/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 CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR IND ONLi UNI PURi NAV STA PRE LOC" Date: Fri, 30 Mar 2012 09:10:54 GMT X-GU-PageRenderer: DefaultPageRenderer Keep-Alive: timeout=5, max=70 Transfer-Encoding: chunked X-GU-tm: 01 Content-Language: en-US Connection: close X-GU-httpd: 05

非常感谢任何帮助。

编辑:恢复到 BeautifulSoup 3 似乎纠正了这个问题。令人费解!

4

1 回答 1

1

我通过其他渠道从 Leonard Richardson 那里收到了以下答复。它解决了我的问题

您正在使用 Python 的内置解析器类 HTMLParser,它不像 Beautiful Soup 3 使用的内置 SGMLParser 那样宽松。

从 Python 2.7.3 和 Python 3.2.2 开始,内置的 HTMLParser 变得更加宽松,但最简单的解决方案是安装外部解析库。lxml 或 html5lib 应该能够解析此文档。

这在这里解释:

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

于 2012-03-30T20:31:09.357 回答