python - 使用循环进行 Webscraping 仅返回单个元素
问题描述
当我运行一个 for 循环来收集<div>
标签中的元素时,它只返回所有具有相同class
.
例如:
r = requests.get("https://one-versus-one.com/en/rankings/all/statistics")
soup = BeautifulSoup(r.content, 'lxml')
data = {
'players': [],
'club': [],
'rank': []
}
def getstuff(soup):
products = soup.find_all('div', {'class':'rankings-table'})
for name in products:
players = name.find('div', {'class':'player-name rankings-table__player-name'}).text
club = name.find('span', {'class':'rankings-table__club-name'}).text
rank = name.find('div', {'class':'rankings-table-cell value rankings-table__value'}).text.strip()
data['players'] = players
data['club'] = club
data['rank'] = rank
print(data)
getstuff(soup)
这将返回:
{“球员”:“莱昂内尔·梅西”,“俱乐部”:“巴塞罗那”,“排名”:“100”}
我希望所有球员、俱乐部和排名都打印在页面内。
解决方案
你可以试试这个:
import requests
from bs4 import BeautifulSoup
r = requests.get("https://one-versus-one.com/en/rankings/all/statistics")
soup = BeautifulSoup(r.content, 'lxml')
data = {'players': [],'club': [],'rank': []}
def getstuff(soup):
products = soup.find('div', {'class':'rankings-table'}).find_all("a")
for name in products:
players = name.find('div', {'class':'player-name rankings-table__player-name'}).text
club = name.find('span', {'class':'rankings-table__club-name'}).text
rank = name.find('div', {'class':'rankings-table-cell value rankings-table__value'}).text.strip()
data['players'].append(players)
data['club'].append(club)
data['rank'].append(rank)
print(data)
getstuff(soup)
"""
{'players': ['Lionel Messi', 'Junior Neymar', 'Robert Lewandowski', 'Joao Cancelo', 'Kevin de Bruyne', 'Rodri', 'Jesse Lingard', 'Riyad Mahrez', 'Ilkay Gundogan', 'John Stones'], 'club': ['Barcelona', 'Paris Saint-Germain', 'Bayern Munich', 'Manchester City', 'Manchester City', 'Manchester City', 'West Ham United', 'Manchester City', 'Manchester City', 'Manchester City'], 'rank': ['100', '95', '93', '92', '91', '90', '90', '89', '88', '88']}
"""
您必须使用.find_all("a")
来获取有关所有玩家的信息。另外,您只是在添加新球员data['players']
时添加新球员,而对于俱乐部,排名相同。
推荐阅读
- python - 比较两个数据框并输出新列
- com - 在哪里可以找到 Microsoft Javascript 中函数 GetObject 的文档?
- elasticsearch - 从 ElasticSearch 中删除特定文档?
- xml - 如何使用 XSLT 和 Python 将 xml 的子子元素移动到新的 xml 文件?
- jqgrid - 为什么我的 JqGrid 在我更改问题类型时会缩小?
- mysql - Azure MySQL Workbench 8.0.25 DDL 搞砸了
- python - 如何在 Excel 中读取公式并将其转换为在 Python 中进行计算?
- laravel - 如何在 Laravel 中发出 SOAP 请求?
- javascript - Cordova - 插件 Admob 免费显示仅测试广告
- c - 从二进制文件中读取结构会导致错误的字符