使用beautifulsoup解析html页面时丢失的信息

时间:2013-05-07 03:41:35

标签: python beautifulsoup web-crawler html-parser

我正在写一个网络蜘蛛来从网站上获取一些信息。当我解析这个页面时http://www.tripadvisor.com/Hotels-g294265-oa120-Singapore-Hotels.html#ACCOM_OVERVIEW ,我发现有些信息丢失,我使用soup.prettify()打印html doc,而html doc与我使用urllib2.openurl()获取的文档不一样,有些东西丢失了。代码如下:

    htmlDoc = urllib2.urlopen(sourceUrl).read()
    soup = BeautifulSoup(htmlDoc)

    subHotelUrlTags = soup.findAll(name='a', attrs={'class' : 'property_title'})
    print len(subHotelUrlTags)
    #if len(subHotelUrlTags) != 30:
    #   print soup.prettify()
    for hotelUrlTag in subHotelUrlTags:
        hotelUrls.append(website + hotelUrlTag['href'])

我尝试使用HtmlParser做同样的事情,它打印出以下错误:

 Traceback (most recent call last):
 File "./spider_new.py", line 47, in <module>
 hotelUrls = getHotelUrls()
 File "./spider_new.py", line 40, in getHotelUrls
 hotelParser.close()
 File "/usr/lib/python2.6/HTMLParser.py", line 112, in close
 self.goahead(1)
 File "/usr/lib/python2.6/HTMLParser.py", line 164, in goahead
 self.error("EOF in middle of construct")
 File "/usr/lib/python2.6/HTMLParser.py", line 115, in error
 raise HTMLParseError(message, self.getpos())
 HTMLParser.HTMLParseError: EOF in middle of construct, at line 3286, column 1

1 个答案:

答案 0 :(得分:1)

下载并安装lxml ..

它可以解析这种“有缺陷”的网页。 (HTML可能以某种奇怪的方式被破坏,并且Python的HTML解析器在理解那种东西方面并不是很好,即使有bs4的帮助。)

此外,如果安装lxml,则无需更改代码,BeautifulSoup将自动选取lxml并使用它来解析HTML。