繁体   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