首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find时BeautifulSoup挂起

问使用find时BeautifulSoup挂起
EN

Stack Overflow用户
提问于 2016-03-18 16:47:39
回答 2查看 1.3K关注 0票数 3

我对bs4包有一个问题。

我有一个html文档,如下所示:

代码语言:javascript
复制
data = """<html><head></head><body>
<p> this is tab </p>
<img src="image.jpg">
</body></html>
"""

这是我的代码:

代码语言:javascript
复制
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'html5lib')
soup.find_all("a")

当我运行它时,bs4仍然在循环中并且不返回任何东西,可能是因为在某些HTML数据中不存在标记a。

非常感谢。

  1. 是的,上面的例子在我的例子中是working correctly.
  2. But,。data是一个多行的变量html string

代码语言:javascript
复制
from bs4 import BeautifulSoup
data = open("file.htm").read()
soup = BeautifulSoup(data, 'html5lib')
soup.find_all("a")

  1. 请测试我的文件:file.htm
  2. I'm using beautifulsoup4==4.4.1。Python 3.5.1
  3. 再次感谢。
EN

回答 2

Stack Overflow用户

发布于 2016-03-19 02:18:47

尝试使用内置的html.parser,它甚至可以处理无效的超文本标记语言。

代码语言:javascript
复制
from bs4 import BeautifulSoup

data = """<html><head></head><body>
<p> this is tab </p>
<img src="image.jpg">
</body></html>
"""

soup = BeautifulSoup(data, 'html.parser')
soup.find_all("a")
票数 4
EN

Stack Overflow用户

发布于 2016-03-18 17:04:09

我不明白为什么你的程序在使用find_all时会挂起,如果html页面很大,可能需要一段时间,但它不应该挂起。

下面是一些你可以尝试的东西:

  • 如果您在解析网页之前下载网页,可能会导致挂起。使用pdb来检测程序挂起的确切位置,将这一行添加到代码import pdb; pdb.set_trace()的开头并从那里跟踪它
  • 确保您通过运行pip freeze | grep html5lib安装了pip freeze | grep html5lib,如果它不存在,请使用pip install --upgrade beautifulsoup4

安装它类似的SO BeautifulSoup,有人提到他们通过升级BeautifulSoup修复了它,请尝试使用:

在BeautifulSoup文档中,他们建议对某些Python版本使用特定的解析器:

如果可以的话,我建议您安装并使用

以提高速度。

如果您使用的是早于2.7.3的Python2版本,或者是早于3.2.2的Python3版本,那么安装lxml或html5lib是必不可少的-- Python内置的HTML解析器在旧版本中性能不是很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36079845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档