我正在开发一些代码从网站上抓取文本。我不想刮去整个页面,只想刮去页面中包含某些单词的部分。理想情况下,我想把包含这个词的整个段落删去。我见过使用.find_all(“p”)行的示例,但是我发现许多网站不使用HTML定义的段落(“p”)。因此,我不想这样做
现在,我使用的方法是在搜索某个单词之前和之后搜索文本。然而,这里的问题是,同样的句子可以被多次提及。例如,在下面的代码中,“干旱正在推动东非粮食价格急剧上涨”这句话被提到了三次。代码如下:
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re
url = "https://www.un.org/africarenewal/news/drought-pushing-food-prices-sharply-east-africa"
req = Request(url, headers={"User-Agent": 'Mozilla/5.0'})
page = urlopen(req, timeout = 5) # Open page within 5 seconds. This line skips 'empty' websites
htmlParse = BeautifulSoup(page.read(), 'lxml') #html5lib
SearchWords = ["drought", "water", "food"] # text must contain these words
textP = ""
text = ""
for word in SearchWords:
print(word)
for r in re.findall(re.compile('.{0,100}'+word+'.{0,100}'), htmlParse.text):
textP = textP + r
text= text + textP
print(text)
如前所述,我希望得到所有包含某个单词的段落,没有重复。有人有这方面的经验吗?非常感谢
要将字符串拆分为段落,可以使用Python
re
和接下来,您希望获得包含预定义字符串之一的唯一段落:
现在,如果要执行不区分大小写的整词搜索,可以再次使用
re
:这里,
\b(?:drought|water|food)\b
正则表达式将drought
、water
或food
作为整词查找,并且re.I
将确保不区分大小写的搜索相关问题 更多 >
编程相关推荐