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'?
如有任何帮助,我们将不胜感激。
你已经接近解决方案并且已经正确选择了,但是你不会在
<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")]