【问题标题】:BeautifulSoup find_all that 'Kind of match'BeautifulSoup find_all that 'kind of match'
【发布时间】:2021-09-15 10:49:20
【问题描述】:

我想抓取一个网站,我需要获取与我的搜索字符串的第一个字符匹配的所有标签。

所以基本上有几个这样的div:

<div class="" style="" id="uni-item-229925"></div>
<div class="" style="" id="uni-item-223625"></div>
<div class="" style="" id="uni-item-229325"></div>

我想知道所有以 uni-item 开头的 div,不管它们的结尾编号是什么。

如果他们都一样,我会使用这个:

items = soup.find_all('div', {"class": "uni-item"})

但对于这个特定的用例,我一无所知,非常感谢任何帮助

【问题讨论】:

    标签: python pandas web-scraping beautifulsoup


    【解决方案1】:

    我认为约翰克莱门茨在这里很好地回答了这个问题(双关语)。 https://stackoverflow.com/a/14257743/16068811

    所以在你的情况下:

    items = soup.findAll("div", {"id" : re.compile('uni-item.*')})
    

    items = soup.findAll("div", {"id" : lambda L: L and L.startswith('uni-item')})
    

    没试过,但应该可以。

    【讨论】:

      【解决方案2】:

      您可以使用 css 选择器轻松做到这一点,如下所示:

      items = soup.select('div[#id^ = "uni-item"]')
      

      【讨论】:

      • 这是一个错误的选择器。建议soup.select('div[id^="uni-item"]')soup.select('div[id*="uni-item"]')
      【解决方案3】:

      试试这个:

      from bs4 import BeautifulSoup
      
      html = '''
      <div class="" style="" id="uni-item-229925"></div>
      <div class="" style="" id="uni-item-223625"></div>
      <div class="" style="" id="uni-item-229325"></div>
      <div class="" style="" id="229325"></div>
      '''
      
      soup = BeautifulSoup(html , 'html.parser')
      items = soup.findAll("div", {"id" : lambda x: x and 'uni-item' == x[:8]})
      print(*items, sep='\n')
      

      输出:

      <div class="" id="uni-item-229925" style=""></div>
      <div class="" id="uni-item-223625" style=""></div>
      <div class="" id="uni-item-229325" style=""></div>
      

      【讨论】:

        猜你喜欢
        • 2021-04-28
        • 1970-01-01
        • 2021-01-22
        • 2019-12-20
        • 1970-01-01
        • 2023-03-23
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多