使用 BeautifulSoup 提取标签之间的文本
Posted
技术标签:
【中文标题】使用 BeautifulSoup 提取标签之间的文本【英文标题】:Extracting text between tags using BeautifulSoup 【发布时间】:2016-03-27 02:10:56 【问题描述】:我正在尝试使用 BeautifulSoup 从一系列都遵循类似格式的网页中提取文本。我希望提取的文本的 html 在下面。实际链接在这里:http://www.p2016.org/ads1/bushad120215.html。
<p><span style="color: rgb(153, 153, 153);"></span><font size="-1"> <span
style="font-family: Arial;"><big><span style="color: rgb(153, 153, 153);"></span></big></span></font><span style="color: rgb(153, 153, 153);"></span><font size="-1"><span style="font-family: Arial;"><big><span
style="color: rgb(153, 153, 153);"></span></big></span></font><font
size="-1"><span style="font-family: Arial;"><big><span style="color: rgb(153, 153, 153);"></span></big></span></font><font size="-1"><span style="font-family: Arial;"><big><span style="color: rgb(153, 153, 153);"></span></big></span></font></p> <p><span style="color: rgb(153, 153, 153);">[Music]</span><span
style="text-decoration: underline;"><br>
</span></p>
<p><small><span style="text-decoration: underline;">TEXT</span>: The
Medal of Honor is the highest award for valor in action against an
enemy force</small><span style="text-decoration: underline;"><br>
</span></p>
<p><span style="text-decoration: underline;">Col. Jay Vargas</span>:
We
were
completely
surrounded,
116 Marines locking heads with 15,000
North Vietnamese. Forty hours with no sleep, fighting hand to
hand.<span style="text-decoration: underline;"><br>
<span style="font-family: helvetica,sans-serif;"><br>
</span>
我想找到一种方法来遍历我文件夹中的所有 html 文件并提取所有标记之间的文本。我在这里包含了我的代码的相关部分:
text=[]
for page in pages:
html_doc = codecs.open(page, 'r')
soup = BeautifulSoup(html_doc, 'html.parser')
for t in soup.find_all('<p>'):
t = t.get_text()
text.append(t.encode('utf-8'))
print t
但是,什么都没有发生。为菜鸟问题道歉,并提前感谢您的帮助。
【问题讨论】:
【参考方案1】:
for t in soup.find_all('<p>'):
只需指定标签名称,而不是表示:
for t in soup.find_all('p'):
您可以通过以下方式将搜索范围缩小到对话段落:
for span in soup.find_all("span", style="text-decoration: underline;"):
text = span.next_sibling
if text:
print(span.text, text.strip())
【讨论】:
对不起,我忘了说在这个块之前还有其他的,我只想选择这个。我不确定每个文件中是否有相同数量的
...
@StanO 没问题,我感觉您想缩小搜索范围。只是有点不清楚您要提取哪些p
元素,它们与其他元素有什么不同?谢谢!
很明显,对吧? :-) 我把链接放在上面的实际 html 上。也许我错过了一些东西,但我认为 span 对象是最显着的特征。
@StanO 好吧,让我们换个角度想一想:对于提供的链接,您想要的输出是什么?
理想情况下,我希望广告的对话在一个列表中,而“注释:”部分在另一个列表中。我一直在尝试使用正则表达式来做到这一点,但运气不佳......以上是关于使用 BeautifulSoup 提取标签之间的文本的主要内容,如果未能解决你的问题,请参考以下文章
从 BeautifulSoup 4.6 中的两个 HTML 标签之间提取 HTML
使用 BeautifulSoup 迭代 XML 以提取特定标签并存储在变量中