Python-BeautifulSoup-如何从多个同名类中导出数据

问题描述 投票:0回答:1
box5=soup.find_all("div",class_="match-header-vs-score")
for p in box5:
    matchtdetails=p.find("div",class_="match-header-vs-note").get_text(strip=True)
    print("          In: ",matchtdetails) 
    
    
box6=soup.find_all("div",class_="match-header-vs-note")
for q in box6:
    if q.find("div",class_="match-header-vs-note"):
     matchdetails1=q.find("div",class_="match-header-vs-note").get_text(strip=True)
     print(matchdetails1)

我正在尝试从电子竞技统计网站(vlr.gg)中抓取一些数据。我决定使用 BeatifulSoup,但现在从相同的类名中抓取数据时遇到一些问题。 [这是我在这里使用的特定 html 代码块]

<div class="match-header-vs-score">
<div class="match-header-vs-note">
<span class="match-header-vs-note mod-upcoming">18h 24m 
</span>
</div>
<div class="match-header-vs-placeholder"> –
</div>
<div class="match-header-vs-note">Bo3
</div>
</div>  

我是 html 抓取的新手,根据我的理解,为了派生特定数据,我应该将“框”指向立即包装我想要的数据的类的类,然后循环遍历这些类并“查找”我想要从中获取数据的特定类。 Box5 用于导出剩余时间统计数据,box6 用于获取其格式(bo1、bo3 等)

但是在这段代码中,box6 没有返回任何东西。

对于box5,我最初尝试在“match-header-vs-note”上使用“find_all”,因为那是包装“match-header-vs-note mod-upcoming”的直接类,但它一直给我NoneType 属性错误。我认为表示多个类的空格是问题所在,但事实并非如此,名称中带有空格的类似类在其他地方也可以工作。在我将 box5 的代码更改为上面给出的代码后,它就可以工作了。

最初我的思维过程是在循环中使用“find_all”并将数据存储在列表中,但据我所知,它给出了以下错误:

AttributeError: 'NavigableString' object has no attribute 'find_all'. Did you mean: '_find_all'?

如有任何帮助,我们将不胜感激。

python web-scraping beautifulsoup
1个回答
0
投票

你已经接近解决方案并且已经正确选择了,但是你不会在

<div>
中找到另一个具有相应类别的
box6
,因为你已经将自己定位在这个类别中。

尝试简化你的方法:

box5,box6 = [e.get_text(strip=True) for e in soup.find_all("div",class_="match-header-vs-note")]
示例
import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(requests.get('https://www.vlr.gg/326896/leviat-n-gc-vs-firepower-game-changers-2024-latam-south-opening-w5').text)

box5,box6 = [e.get_text(strip=True) for e in soup.find_all("div",class_="match-header-vs-note")]
© www.soinside.com 2019 - 2024. All rights reserved.