【问题标题】:BeautifulSoup only returns what is inside the head tagBeautifulSoup 只返回 head 标签内的内容
【发布时间】:2012-12-27 22:43:33
【问题描述】:

我正在使用 BeautifulSoup,我遇到了错误或错误。在我的示例中,我抓取了 NY Times 的一个子版块网站...

import urllib2
from bs4 import BeautifulSoup
website = "http://www.nytimes.com/pages/politics/index.html"
data = BeautifulSoup(urllib2.urlopen(website).read())
print data

当我运行代码时,我会返回 head 标签以及其中的内容。但是,它不会抓取正文标签内的内容。如果我要将网站 url 更改为 http://www.nytimes.com,那么 BS 会返回整页源代码。这里发生了什么事,为什么我在抓取http://www.nytimes.com/pages/politics/index.html 时没有得到正文标签?

【问题讨论】:

  • 无法重现。当我运行此代码时,它会获取整个页面,而不仅仅是 head 标记。
  • 嗯...问题中的代码与我文件中的内容一字不差。我会说它还抓住了html 标签。就像body 标签不存在一样。
  • 您使用的是什么版本的 BeautifulSoup?需要明确的是,如果您在上面的代码(并且只有上面的代码)之后打印data.body,它会打印None? (对我来说,它会打印body 标签的内容)
  • 我有 BS4,是的,它打印 None
  • 有趣...旧版本没有这个错误,所以这看起来像一个错误。

标签: python url web-crawler beautifulsoup


【解决方案1】:

这不是 BeautifulSoup 中的错误。问题实际上在于 bs4 使用内置的 HTMLParser,它对格式错误的 HTML 不是很宽容,因为W3C Markup Validation Service 显示 HTML 确实格式错误,并且几乎没有未封闭、杂散和放错位置的 TAGS 导致 HTMLParser 和随后 BeautifulSoup 停止解析突然。

在针对 BeautifulSoup 提交的以下错误中已解释了此问题

BS4 stops parsing after malformed tag

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多