【发布时间】:2018-02-13 13:29:48
【问题描述】:
在尝试对 Project Gutenberg 文件执行文本分析时,我在使用 BeautifulSoup 时遇到了很多问题(请参阅此处以获取 yesterday's solved problem)。我几乎把所有代码都整理好了,但最后一个问题让我感到困惑:在我从 BeautifulSoup 清理的版本中消除了一些冗余文本之后,如何获得一个干净的文本文件。让我解释一下:
第 1 步:我在记录文本标题时提取文本减去 html 垃圾:
from bs4 import BeautifulSoup
import re
### Opens saved html file
html = open("/filepath/Jane_Eyre_Test.htm")
### Cleans html file
soup = BeautifulSoup(html, 'html.parser')
title = re.findall(r'<title>(.*?)</title>',soup.get_text())
第 2 步:删除样板古腾堡许可证文本,以免混淆分析:
s1 = '***START OF THE PROJECT GUTENBERG EBOOK '+title[0].upper()+'***'
s2 = '***END OF THE PROJECT GUTENBERG EBOOK '+title[0].upper()+'***'
main_text = soup.get_text()[(soup.get_text().index(s1)+len(s1)):soup.get_text().index(s2)]
第 3 步:打开文本文件将结果写入:
#### Opens blank text file
f = open('filepath/'+titles[0]+'.txt', 'w')
f.write(main_text)
现在,问题来了:当我这样做时,生成的文本文件充满了格式化标签,例如:
转录自 1897 年服役 &大卫·普莱斯的佩顿版,电子邮件 ccx074@pglaf.org
但是当我尝试如下使用美丽的汤来清洁它时,
main_text1 = BeautifulSoup(main_text, 'html.parser')
f.write(main_text1.get_text())
结果也好不了多少。
</pre> <p><a name="startoftext"></a></p> <p>Transcribed from the 1897
Service & Paton edition by David Price, email ccx074@pglaf.org</p>
尽管
f.write(soup.get_text())
生成格式完美的文本文件。我怀疑我在这里遗漏了文本格式和 html 格式之间的一些关键区别;如果是这样,任何指示表示赞赏。当然,任何摆脱文本格式标签的解决方案都将受到更多赞赏。
【问题讨论】:
-
您是否尝试将解析器更改为 lxml 或 html5lib?
-
刚试了一下,却得到:“FeatureNotFound:找不到具有您要求的功能的树生成器:html5lib.parser。您需要安装解析器库吗?” html5lib 和 lxml 的 pip install 说它们已经安装了。
-
是的,你需要通过
pip install html5lib安装html5lib
标签: python html python-3.x beautifulsoup