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

时间:2017-10-12 23:47:30

标签: python beautifulsoup

我正在尝试从本文(https://www.vanityfair.com/style/society/2014/06/monica-lewinsky-humiliation-culture)中提取文章文本,并在底部排除合法容器。文本部分看似简单,但似乎无法摆脱容器。我已将其与法律变量分开以便于使用。

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

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

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,您可能需要的文字会分组在sectiondiv内,class属性为content drop-cap。你可以使用:

content_div = soup.find('div', {'class': 'content drop-cap'})

通过这种方式,您可以灵活地按部分对文本进行分组:

sections = content_div.findAll('section')

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

来自the documentation

  

<强>分解()

     

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

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

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