4

我想从某个网站上抓取 HTML,然后将其发送到 BeautifulSoup 进行解析。问题是 urllib2.urlopen() 返回的 HTML 包含换行符 (\n) 和制表符 (\t) 以及单引号和其他字符转义。当我尝试使用此 HTML 构建 BeautifulSoup 对象时,出现错误。

b = BeautifulSoup(src)

给出这个错误

我的代码:

def get_page_source(url):
    """
    Retrieves the HTML source code for url.
    """
    try:
        return urllib2.urlopen(url)
    except:
        return ""


def retrieve_links(url):
    """
    Use the BeautifulSoup module to efficiently grab all links from the source
    code retrieved by get_page_source.
    """
    src = get_page_source(url)   
    b = BeautifulSoup(src)

    .
    .
    .

我怎么解决这个问题?

编辑

import urllib2

link = "http://www.techcrunch.com/"
src = urllib2.urlopen(link).read()

f = open('out.txt', 'w')
f.write(src)
f.close()

给出这个输出

4

1 回答 1

2

问题是您正在解析的 HTML 包含嵌入的 JavaScript 代码(BeautifulSoup 错误抱怨第 130 行,它位于嵌入的 JavaScript 中间),并且 JavaScript 包含嵌入的 HTML。

第 130 行,注意<a>标签:

adNode += "<a href='http://t.aol.com?ncid=...

它是 HTML 和 JavaScript 的俄罗斯套娃,Python 的内置解析器无法处理它。

您可以按照 BeatifulSoup 本身在您发布的错误消息中给出的安装解析器的说明进行操作:

Python 的内置 HTMLParser 无法解析给定的文档。这不是 Beautiful Soup 中的错误。最好的解决方案是安装一个外部解析器(lxml 或 html5lib),并将 Beautiful Soup 与该解析器一起使用。请参阅http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser寻求帮助。

于 2012-05-18T05:46:06.170 回答