【发布时间】:2013-07-13 15:57:41
【问题描述】:
我正在尝试使用 BeautifulSoup 从网站 (http://brooklynexposed.com/events/) 中提取内容。作为问题的一个例子,我可以运行以下代码:
import urllib
import bs4 as BeautifulSoup
url = 'http://brooklynexposed.com/events/'
html = urllib.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(html)
print soup.prettify().encode('utf-8')
输出似乎截断了html如下:
<li class="event">
9:00pm - 11:00pm
<br/>
<a href="http://brooklynexposed.com/events/entry/5432/2013-07-16">
Comedy Sh
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>
它正在切断名称为 Comedy Show 的列表以及后面的所有 html,直到最后的结束标记。大多数 html 将被自动删除。我在许多网站上都注意到类似的事情,如果页面太长,BeautifulSoup 无法解析整个页面而只是剪切文本。有人对此有解决方案吗?如果 BeautifulSoup 不能处理这样的页面,有没有人知道其他类似 prettify() 功能的库?
【问题讨论】:
-
对我来说,全部内容都在那里。从创建
soup对象的代码开始:>>> len(unicode(soup))返回107578您使用的是哪个版本的BS?我正在使用 4.2.0。 -
您的代码对我来说很好用。如果网络传输在那个确切点被中断(所以你只加载到
Comedy Sh),那么 HTML 解析器将“关闭”所有仍然打开的标签,你会看到你得到了什么。 -
有趣的是,我使用的是 4.2.1 和 Python 2.7。但是,当我使用 3.2 时,它似乎可以工作。这不可能是超时问题,因为如果我将原始 HTML 打印到文件中,那么所有文本都会出现。关于 2.7 解决方案的任何其他想法?否则是时候开始移植我的代码了。
-
使用了不同的 HTML 解析器? BeautifulSoup 将使用可用的“最佳”解析器,因此如果安装了
lxml,例如将使用该解析器。不同的解析器以不同的方式处理损坏的 HTML。你可能想运行.diagnose()method 来看看 BeautifulSoup 告诉你什么。如果您无法弄清楚这告诉您什么,请将输出粘贴到您的问题中。 -
不确定你是否明白,但它对我来说很好用漂亮的汤 4.1.1 和 python 2.7。我升级到 4.3.1,它仍然可以工作。
标签: python beautifulsoup urllib