所以我试图只检索p标签中的信息,我什么都不想了。我该怎么做?这是我到目前为止所做的。我正在获取不需要的其他信息
page = requests.get('https://www.theguardian.com/world/2016/jun/30/mexican-
woman-117-years-old-dies-birth-certificate')
soup = BeautifulSoup(page.text, 'html.parser')
#soup.i.decompose()
content_list = soup.find('body')
# Pull text from all instances of <p> tag within BodyText div
content_list_items = content_list.find_all('p')
for content_list in content_list_items:
print(content_list.prettify())
答案 0 :(得分:0)
我不确定您所获得但不需要的“附加信息”是什么意思。 您可以使用 text 属性获得不含任何HTML标记的纯文本,如下所示:content_list.text。如果那不是您想要的,请指定您的问题:您期望的结果是什么?
import requests
from bs4 import BeautifulSoup, NavigableString
page = requests.get('https://www.theguardian.com/world/2016/jun/30/mexican-woman-117-years-old-dies-birth-certificate')
soup = BeautifulSoup(page.text, 'html.parser')
content_list_items = soup.body.find_all('p')
for content_list in content_list_items:
txt = content_list if type(content_list) == NavigableString else content_list.text
print(txt)
编辑
因此,基于此解决方案(How to remove content in nested tags with BeautifulSoup?),您可以迭代子代并仅选择NavigableString类型的子代。不过,对于您的特定示例,这还将删除定位标记中的链接,例如句子:曼城的一名117岁妇女最终获得了出生证明... ,而原来的句子是墨西哥的一名 117岁妇女 > City终于收到了她的出生证明...
content_list_items = soup.body.find_all('p')
for content_list in content_list_items:
for child in content_list.children:
if type(child) == NavigableString:
print(child.strip())