【问题标题】:How to select div including a span with specific id via beautifulsoup?如何通过beautifulsoup选择包含具有特定ID的跨度的div?
【发布时间】:2021-11-14 18:47:52
【问题描述】:

我想抓取一些 div 的文本,其中包括带有特定 idclassspan

例如:

    <div class="class1" > 
      <span id="span1"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span2"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span1"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span3"></span>
      text to scrape
    </div>

我想获取 div (class1) 中的文本,但特别是只有一个女巫包含 span (span1)

谢谢


谢谢你,我用下面的代码解决了我的问题:

soup = BeautifulSoup(html, "html.parser")
for x in soup.find_all(class_='class1'):
    x_span = x.find('span',class_='span1')
    print(x_span.parent.text.strip())

【问题讨论】:

  • 我觉得一开始你应该把
    改成

标签: python html beautifulsoup


【解决方案1】:

应该这样做

soup.select_one('.class1:has(#span1)').text

【讨论】:

    【解决方案2】:

    正如 Beso 所说,您的 html 中有一个错字,应该更正。

    如何选择?

    我认为最简单的方法是使用css selector 来选择所有&lt;div&gt; 具有&lt;span&gt;class 名为“span1”(因为您的示例html 中不止一个)

    soup.select('div:has(> #span1)')
    

    或者更具体的,如 diggusbiccus 所述:

    soup.select('.class1:has(> #span1)')
    

    要获取所有文本的文本,您必须迭代结果集:

    [x.get_text(strip=True) for x in soup.select('div:has(> #span1)')]
    

    这会给你一个文本列表:

    ['text to scrape', 'text to scrape']
    

    示例

    from bs4 import BeautifulSoup
    
    html='''
    <div class="class1" > 
      <span id="span1"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span2"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span1"></span>
      text to scrape
    </div>
    <div class="class1" > 
      <span id="span3"></span>
      text to scrape
    </div>
    '''
    soup = BeautifulSoup(html, "html.parser")
    
    [x.get_text(strip=True) for x in soup.select('div:has(> #span1)')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 2020-12-19
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      相关资源
      最近更新 更多