【发布时间】:2021-12-17 03:23:11
【问题描述】:
我是抓取的初学者,我正在尝试从这个网站抓取数据(使用 beautifulSoup): https://www.transfermarkt.co.uk/transfers/transferrekorde/statistik?saison_id=alle&land_id=0&ausrichtung=&spielerposition_id=&altersklasse=&leihe=&w_s=&plus=1
按照这个不完整的教程:https://fcpython.com/scraping/introduction-scraping-data-transfermarkt
更准确地说是在这个网站部分(基本上它是一个包含一些历史信息的足球运动员名单):
首先我已经识别出我感兴趣的元素,例如:
- 玩家名
- 价值
- 年龄
- 季节
其次,我为每个对象创建了 1 个对象,以便将所有这些数据放入 pandas 数据框。
这是我的代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd , numpy as np
headers = {'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
page = "https://www.transfermarkt.co.uk/transfers/transferrekorde/statistik?saison_id=alle&land_id=0&ausrichtung=&spielerposition_id=&altersklasse=&leihe=&w_s=&plus=1"
pageTree = requests.get(page, headers=headers)
pageSoup = BeautifulSoup(pageTree.content, 'html.parser')
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
Values = pageSoup.find_all("td", {"class": "rechts hauptlink"})
Age = pageSoup.find_all("td", {"class": "zentriert"})
最后,在一个 for 循环中,我创建了一个包含我想要的所有信息的 Pandas 数据框:
PlayersList = []
ValuesList = []
value_pre = []
rank = []
age = []
season = []
team = []
missing = []
for i in range(0,25):
PlayersList.append(Players[i].text)
ValuesList.append(Values[i].text)
value_pre.append(Values_pre[2*i].text)
rank.append(Age[(5*i)].text)
age.append(Age[1 + (5*i)].text)
season.append(Age[2 + (5*i)].text)
missing.append(Age[3 + (5*i)].text)
team.append(Age[4 + (5*i)].text)
df = pd.DataFrame({"Players":PlayersList,"Value_post":ValuesList , "value_pre":value_pre , "rank": rank , "age":age , "season":season , "missing": missing , "team":team })
df.head()
我得到的结果是这样的熊猫数据框:
我的问题:
如果我在 for 循环中的 range() 上放置一个数字>25,我会收到此错误:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-202-326415267fee> in <module>
9
10 for i in range(0,26):
---> 11 PlayersList.append(Players[i].text)
12 ValuesList.append(Values[i].text)
13 value_pre.append(Values_pre[2*i].text)
IndexError: list index out of range
由于屏幕上的表格按每个表格页面显示 25 名玩家,我可以只抓取前 25 名玩家信息。
如果我转到第二页(见屏幕),url 不会改变,那么我如何在 python 上控制呢?
【问题讨论】:
标签: python-3.x web-scraping beautifulsoup request