【问题标题】:How to exclude an element with BeautifulSoup (Python)如何使用 BeautifulSoup (Python) 排除元素
【发布时间】:2017-10-12 23:47:29
【问题描述】:

我正在尝试从这篇文章 (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()

我该怎么办?

【问题讨论】:

  • 不是排除,你不能定义一个比所有p标签更好的选择吗?
  • 我试过了,但似乎找不到好方法。所有文本,包括合法容器中的文本,都有

    等标签。合法容器具体是在

    直到

    内;有没有一种好方法可以排除那些专门或更好定义的 p 标签?

  • 选择器div.article-main p怎么样?文章中的所有段落

标签: python beautifulsoup


【解决方案1】:

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

在您的情况下,您可能需要的文本在div 内的section 标记中分组,该class 属性为content drop-cap。您可以使用:

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

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

sections = content_div.findAll('section')

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

来自BeautifulSoup documentation

分解()

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

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

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

【讨论】:

  • 谢谢!这超级有用!我还是新手 :)
猜你喜欢
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2022-08-20
  • 1970-01-01
  • 2018-11-04
相关资源
最近更新 更多