清除标签bs4

时间:2018-11-02 21:46:07

标签: python python-3.x beautifulsoup

所以我试图只检索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())   

1 个答案:

答案 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())