【问题标题】:Filtering into specific class in BeautifulSoup过滤到 BeautifulSoup 中的特定类
【发布时间】:2017-08-15 06:58:45
【问题描述】:

我正在使用 BeautifulSoup 做这样的事情:

for name in soup.find_all('div','name'):

当我使用这个过滤器时,我的理解是我会得到所有带有属性或类名namediv标签。

但是,我不希望 div 标记的每个实例都具有 name 属性。我想要它们位于 HTML 文件的某个子树中的某些实例。更具体地说,标签<u1 class="list-box mb-3 spacer">...<u1\> 中的实例,它比我要查找的标签高两个级别。所以我的问题是,我如何在soup.find_all() 中编写过滤器来放大一个类?

如果我混淆了任何术语,我提前道歉。这是我第一次尝试网络抓取。我不确定要在文档中查看什么。

作为参考,这是我尝试进行网络抓取的网站: http://pd.appbank.net/ml39

【问题讨论】:

    标签: python html web beautifulsoup screen-scraping


    【解决方案1】:

    您不能直接指定在某个父级中搜索标签,但您可以使用嵌套循环来完成它。首先,获取类list-box mb-3 spacer的所有ul标签,然后获取位于每个标签下的所有divs。

    div_list = []
    
    for ul in soup.find_all('ul', {'class' : 'list-box mb-3 spacer'}):
        div_list.extend(ul.find_all('div', {'class' : 'name'}))
    
    print(div_list)
    

    【讨论】:

    • 如果我想过滤掉有某些匹配字符串的孩子的父母,我能做类似的事情吗?目前,我正在查看具有多个父级“spacer mb-5”的页面,并且它们都有一个子级“title-border mb-3”,但我只想从与某个匹配的父级中提取信息细绳。 SoupStrainer 能帮上忙吗?
    • @Psignarok 可能。你必须做一个if tag.find(...):(类似的事情)。
    【解决方案2】:

    因为page 只有一个<ul> 标签,其类为“list-box mb-3 spacer”。您可以先找到<ul class="list-box mb-3 spacer"> 标签,然后在<ul class="list-box mb-3 spacer"> 中找到相应的<div class="name">

    ulTag = soup.find("ul", attrs={"class": "list-box mb-3 spacer"}) divTags = ulTag.find_all("div", {"class": "name"}) print(divTags)

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多