![](/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.