我想使用 Python 从 HTML 文件中提取文本。如果我从浏览器复制文本并将其粘贴到记事本中,我想要的输出基本上与我得到的输出相同。
我想要比使用正则表达式更强大的东西,因为正则表达式可能会在格式不良的 HTML 上失败。我看到很多人推荐 Beautiful Soup,但我在使用它时遇到了一些问题。其一,它拾取了不需要的文本,例如 JavaScript 源代码。而且,它不解释 HTML 实体。例如,我期望' HTML 源中的撇号将转换为文本中的撇号,就像我将浏览器内容粘贴到记事本中一样。
Update html2text
看起来很有希望。它正确处理 HTML 实体并忽略 JavaScript。然而,它并不完全产生纯文本;它会生成 Markdown,然后必须将其转换为纯文本。它没有附带示例或文档,但代码看起来很干净。
相关问题:
- 过滤掉 HTML 标签并解析 python 中的实体
- 在 Python 中将 XML/HTML 实体转换为 Unicode 字符串
我发现的最好的一段代码,可以在不获取 javascript 或不需要的东西的情况下提取文本:
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
html = urlopen(url).read()
soup = BeautifulSoup(html, features="html.parser")
# kill all script and style elements
for script in soup(["script", "style"]):
script.extract() # rip it out
# get text
text = soup.get_text()
# break into lines and remove leading and trailing space on each
lines = (line.strip() for line in text.splitlines())
# break multi-headlines into a line each
chunks = (phrase.strip() for line in lines for phrase in line.split(" "))
# drop blank lines
text = '\n'.join(chunk for chunk in chunks if chunk)
print(text)
你只需要先安装 BeautifulSoup :
pip install beautifulsoup4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)