簡體   English   中英

網頁抓取時如何增加URL中的頁面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM