【问题标题】:Python BeautifulSoup extract Class Text only if it contains specific textPython BeautifulSoup 仅在包含特定文本时才提取类文本
【发布时间】:2022-01-20 15:12:39
【问题描述】:

如果整个类 text = New,有没有办法提取下面的类

 <li class="ClassifiedDetail">New

试过了:

doc.find('li', class_ = 'ClassifiedDetail').attrs['New']

如果类文本 = 新或包含“新”,可能会这样吗?

【问题讨论】:

  • doc.find('li', class_ = 'ClassifiedDetail', text="New") 可能工作
  • @JoseManueldeFrutos 不起作用,下面是原因的答案。谢谢。

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

注意 不清楚你是指类还是标签,所以我假设你是指标签的文本

一种方法是使用css selectors:-soup-contains()

soup.select('li.ClassifiedDetail:-soup-contains("New")')

Alternativ 使用 string=re.compile(), cause stringor in former versionstext` 仅适用于完整字符串的完全匹配:

soup.find_all('li', class_ = 'ClassifiedDetail',text=re.compile('New'))

示例

from bs4 import BeautifulSoup

html='''
<li class="ClassifiedDetail">New</li>
<li class="ClassifiedDetail">New York</li>
<li class="ClassifiedDetail">Ne </li>
<li class="ClassifiedDetail">Old</li>
<li class="ClassifiedDetail">knew</li>
'''

soup = BeautifulSoup(html)
for li in soup.select('li.ClassifiedDetail:-soup-contains("New")'):
    print(li.text)

输出

New
New York

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2023-03-26
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多