使用BeautifulSoup

时间:2017-04-28 08:31:54

标签: python-2.7 beautifulsoup

我需要从新闻文章中提取有用的文字。我使用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时添加一个空格没有帮助。

1 个答案:

答案 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'})]