python webscraper寻址没有类的div

ss2ws0br  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(148)

我正试图从Liquipedia中抓取一些数据,但我在运行脚本时遇到了麻烦。
以下是我目前掌握的情况:

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}

url = 'https://liquipedia.net/counterstrike/S1mple'

#empty_array

player_data = []

r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')

data = soup.find('div', class_='fo-nttax-infobox')

for player_data in data.find_all('div', attrs={'class': None}):
    print(player_data)

print命令返回所有数据集,但理想情况下,我只希望在https://liquipedia.net/counterstrike/S1mple页面上的"Player Information"框中填充它。
我试过几种方法都不起作用。我的主要问题似乎是那里包含的信息不属于我可以寻址的任何特定的div类。我如何开始创建一个对象,将所有这些数据包含在两列中?
我知道我通常应该使用WikiMedia API,但是作为我学习路径的一部分,我首先尝试熟悉这种方法。

z8dt9xmd

z8dt9xmd1#

因为没有预期的输出,所以这只是指向一个方向--按类选择您的同级元素并使用find_next_sibling('div')

dict( (e.text, e.find_next_sibling('div').text) for e in soup.select('.infobox-description'))
示例
import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
url = 'https://liquipedia.net/counterstrike/S1mple'
soup = BeautifulSoup(requests.get(url, headers=headers).text, 'html.parser')

data = dict( (e.text, e.find_next_sibling('div').text) for e in soup.select('.infobox-description')) 

print(data)
输出
{'Name:': 'Олександр Олегович Костилєв',
 'Romanized Name:': 'Oleksandr Oleghovych Kostyljev',
 'Nationality:': '\xa0Ukraine',
 'Born:': 'October  2, 1997 (age\xa025)',
 'Status:': 'Active',
 'Years Active (Player):': '2013 – Present',
 'Role:': 'AWPer',
 'Team:': 'Natus Vincere',
 'Nicknames:': 'The Undertaker',
 'Approx. Total Winnings:': '$1,733,186',
 'Games:': 'Global Offensive'}

相关问题