【问题标题】:Urllib2 returning HTML with newlines and tabsUrllib2 返回带有换行符和制表符的 HTML
【发布时间】:2012-05-25 16:59:59
【问题描述】:

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

b = BeautifulSoup(src)

this error

我的代码:

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()

this output

【问题讨论】:

  • 我通常通过 Tidy(它有一个 Python 模块)运行我的 HTML,然后用 BeautifulSoup 解析它。奇怪的是,我从未看到过这个错误。您一定是在解析一些严重损坏的 HTML。
  • 这是我第一次遇到这个错误,之前我已经大量使用了 urllib2。

标签: python beautifulsoup urllib2


【解决方案1】:

问题是你正在解析的 HTML 包含嵌入的 JavaScript 代码(BeautifulSoup 错误抱怨第 130 行,在嵌入的 JavaScript 中间),而 JavaScript 包含嵌入的 HTML。

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

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

是HTML和JavaScript的Matryoshka doll,Python内置的解析器处理不了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多