如何使用 BeautifulSoup (Python) 排除元素

Phi*_*ich 3 python beautifulsoup

我试图从本文中提取文章文本(https://www.vanityfair.com/style/society/2014/06/monica-lewinsky-humiliation-culture)并排除底部的合法容器。文本部分看起来很简单,但似乎无法摆脱容器。为了方便使用,我将它与 legal 变量分开。

到目前为止,这是我的代码:

import requests
from bs4 import BeautifulSoup

base_url = 'https://www.vanityfair.com/style/society/2014/06/monica-lewinsky-humiliation-culture'
r = requests.get(base_url)
r_html = r.text
soup = BeautifulSoup(r_html)

legal = soup.find('div',{'class': 'legal-container'})

paragraphs = soup.find_all('p')

for text in paragraphs:
    print text.get_text()
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

小智 5

始终找到您想要的部分,并了解如何单独提取该部分,而不是获取所有文本,然后删除不需要的文本。

在您的情况下,您可能需要的文本被分组在具有属性的sectiona 内的标签中。您可以使用以下方法得到它:divclasscontent drop-cap

content_div = soup.find('div', {'class': 'content drop-cap'})
Run Code Online (Sandbox Code Playgroud)

这样,您就可以灵活地按部分对文本进行分组:

sections = content_div.findAll('section')
Run Code Online (Sandbox Code Playgroud)

但是,如果您仍然坚持获取所有段落并专门排除合法容器,则可以从对象中删除合法容器soup

来自BeautifulSoup 文档

分解()

Tag.decompose() 从树中删除标签,然后完全销毁它及其内容

如果您选择这样做,请在提取文本之前删除不需要的标签:

soup.find('div', {'class': 'legal-container'}).decompose()
Run Code Online (Sandbox Code Playgroud)