![](/img/trans.png)
[英]Web scraping multiple pages when the url changes and adds 'offset=[# here]'
[英]How to increment pages in URL when web scraping
我正在尝试从 transfermarkt.com 获取传输数据。 我试图获取的数据列在 10 页上,因此我需要增加 URL 中的页码。 我让它在一个页面上工作,但无法让它在另一个页面上工作,我看不出有什么区别。 有 10 页,每页包含 25 个五个数据点。 使用下面的两个代码片段,我总共得到 250 行。 但是,对于第二个页面,页面不知何故不会增加,因为输出包括第一页上的数据 10 次。 即第 1 行 = 第 26 行 = 第 51 行,依此类推。
谁能告诉我是什么导致了这个问题?
1)运行正常的代码:
players = []
values = []
headers = {'User-Agent':'Mozilla/5.0'}
with requests.Session() as s:
for page in range(1,21):
r = s.get(f'https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={page}', headers=headers)
soup = bs(r.content,'lxml')
players += [i.text for i in soup.select('.items .spielprofil_tooltip')]
values += [i.text for i in soup.select('.items .rechts.hauptlink')]
2)只返回第一页数据的代码(输出列表长度为250,但第一页数据重复10次)
player_name_15100 = []
age_date_15100 = []
teams_15100 = []
value_fee_15100 = []
headers = {'User-Agent':'Mozilla/5.0'}
with requests.Session() as s:
for page in range(1,11):
r = s.get(f'https://www.transfermarkt.com/transfers/neuestetransfers/statistik/plus/?plus=1&galerie=0&wettbewerb_id=L1&land_id=&minMarktwert=15.000.000&maxMarktwert=100.000.000&yt0&page={page}', headers=headers)
soup = bs(r.content,'lxml')
player_name_15100 += [i.text for i in soup.select('.items .spielprofil_tooltip')]
age_date_15100 += [i.text for i in soup.select('.items .zentriert')]
teams_15100 += [i.text for i in soup.select('.items .vereinprofil_tooltip')]
value_fee_15100 += [i.text for i in soup.select('.items .rechts')]
您可以尝试事先生成链接并从中列出一个列表,然后您可以针对每个列表启动一个 GET 请求。 任何链接失败都可以存储以供以后分析。
我试图访问网站上的后续页面,但访问不同页码时,您使用的链接不一样。
尝试以下方法:
import requests as rq
base_uri = "https://www.transfermarkt.com/transfers/neuestetransfers/statistik/plus/plus/1/galerie/0/wettbewerb_id/L1/land_id/minMarktwert/15.000.000/maxMarktwert/100.000.000/yt0/page/"
generated_uris = [f"{base_uri}{pnum}" for pnum in range(1, 11)]
# Alternately if on older version of python
# generated_uris = ["{0}{1}".format(base_uri,pnum) for pnum in range(1,11)]
for uri in generated_uris:
data = rq.get(uri).text
#do_something_with_the_html
将链接更改为f'https://www.transfermarkt.com/transfers/neuestetransfers/statistik/plus/plus/1/galerie/0/wettbewerb_id/L1/land_id/minMarktwert/15.000.000/maxMarktwert/100.000.000/yt0/page/{page}'
:
import requests
from bs4 import BeautifulSoup as bs
player_name_15100 = []
age_date_15100 = []
teams_15100 = []
value_fee_15100 = []
headers = {'User-Agent':'Mozilla/5.0'}
with requests.Session() as s:
for page in range(1,11):
r = s.get(f'https://www.transfermarkt.com/transfers/neuestetransfers/statistik/plus/plus/1/galerie/0/wettbewerb_id/L1/land_id/minMarktwert/15.000.000/maxMarktwert/100.000.000/yt0/page/{page}', headers=headers)
soup = bs(r.content,'lxml')
player_name_15100 += [i.text for i in soup.select('.items .spielprofil_tooltip')]
age_date_15100 += [i.text for i in soup.select('.items .zentriert')]
teams_15100 += [i.text for i in soup.select('.items .vereinprofil_tooltip')]
value_fee_15100 += [i.text for i in soup.select('.items .rechts')]
print(f"{len(player_name_15100)} lines")
for i, name in enumerate(sorted(player_name_15100), start=1):
print(i, name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.