我需要从新闻文章中提取有用的文字。我使用BeautifulSoup,但输出粘在一起,这使我无法进一步分析文本。
我的代码:
import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.bbc.co.uk/news/uk-england-39607452")
soup = BeautifulSoup(r.content, "lxml")
# delete unwanted tags:
for s in soup(['figure', 'script', 'style']):
s.decompose()
article_soup = [s.get_text() for s in soup.find_all(
'div', {'class': 'story-body__inner'})]
article = ''.join(article_soup)
print(article)
输出看起来像这样(只有前5个句子):
在耶路撒冷被刺死的英国学生汉娜·布拉登的家人说他们被“无意义的人”摧毁了 20岁的布拉登在耶路撒冷的一辆电车上遭到袭击 在耶稣受难日。她在耶路撒冷希伯来大学学习 在她去世的时候,并参加了考古学 那天早上挖了。布拉登先生在胸部被刺了好几次 在医院死了。她被一名从中拔刀的男子袭击 他的行李一再刺伤了老人附近的电车 城市,作为基督徒忙着标记耶稣受难日和犹太人 着名的逾越节。
我尝试在“。”,“?”和“!”等特定标点符号后添加空格。
article = article.replace(".", ". ")
它与段落一起使用(虽然我认为应该有一种更聪明的方法)而不是文章的不同部分的字幕,最后没有任何标点符号。它们的结构如下:
</p>
<h2 class="story-body__crosshead">
Subtitle text
</h2>
<p>
我将非常感谢您的建议。
PS:当我'加入'article_soup时添加一个空格没有帮助。
答案 0 :(得分:3)
您可以在separator
中使用get_text
,这将获取当前元素中由给定字符分隔的所有字符串。
article_soup = [s.get_text(separator="\n", strip=True) for s in soup.find_all( 'div', {'class': 'story-body__inner'})]