当我使用urllib2.urlopen()获取的Guardian文章时,无论如何我都无法创建一个汤。当相同的代码与另一个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(最近一次调用最后一次):文件 “/home/myhome/workspace/guardiangrep/testing.py”,第13行,in soup = BeautifulSoup(data)File“/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行,在Feed中 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 Vary:Accept-Encoding,User-Agent X-GU-gen-jas:05内容类型: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“日期:星期五,2012年3月30日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 连接:关闭X-GU-httpd:05
编辑: 恢复到BeautifulSoup 3似乎纠正了这个问题。令人费解!
答案 0 :(得分: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