首页 > 解决方案 > 获取每个抓取链接的列表长度

问题描述

我对 Python 很陌生,我需要您的专业建议。我最终想要的是,我得到每个球员的伤病名单的长度。玩家存储在 PlayerLinks 中

playerLinks = ['https://www.transfermarkt.de/Serge Gnabry/verletzungen/spieler/159471',
 'https://www.transfermarkt.de/Jamal Musiala/verletzungen/spieler/580195',
 'https://www.transfermarkt.de/Douglas Costa/verletzungen/spieler/75615',
 'https://www.transfermarkt.de/Joshua Kimmich/verletzungen/spieler/161056',
 'https://www.transfermarkt.de/Alexander Nübel/verletzungen/spieler/195778',
 'https://www.transfermarkt.de/Kingsley Coman/verletzungen/spieler/243714',
 'https://www.transfermarkt.de/Christopher Scott/verletzungen/spieler/503162',
 'https://www.transfermarkt.de/Corentin Tolisso/verletzungen/spieler/190393',
 'https://www.transfermarkt.de/Leon Goretzka/verletzungen/spieler/153084',
 'https://www.transfermarkt.de/Javi Martínez/verletzungen/spieler/44017',
 'https://www.transfermarkt.de/Tiago Dantas/verletzungen/spieler/429987',
 'https://www.transfermarkt.de/Robert Lewandowski/verletzungen/spieler/38253',
 'https://www.transfermarkt.de/Lucas Hernández/verletzungen/spieler/281963',
 'https://www.transfermarkt.de/Josip Stanisic/verletzungen/spieler/483046',
 'https://www.transfermarkt.de/Thomas Müller/verletzungen/spieler/58358',
 'https://www.transfermarkt.de/Benjamin Pavard/verletzungen/spieler/353366',
 'https://www.transfermarkt.de/Bouna Sarr/verletzungen/spieler/190685',
 'https://www.transfermarkt.de/Leroy Sané/verletzungen/spieler/192565',
 'https://www.transfermarkt.de/Manuel Neuer/verletzungen/spieler/17259',
 'https://www.transfermarkt.de/David Alaba/verletzungen/spieler/59016',
 'https://www.transfermarkt.de/Niklas Süle/verletzungen/spieler/166601',
 'https://www.transfermarkt.de/Tanguy Nianzou/verletzungen/spieler/538996',
 'https://www.transfermarkt.de/Ron-Thorben Hoffmann/verletzungen/spieler/317444',
 'https://www.transfermarkt.de/Jérôme Boateng/verletzungen/spieler/26485',
 'https://www.transfermarkt.de/Alphonso Davies/verletzungen/spieler/424204',
 'https://www.transfermarkt.de/Eric Maxim Choupo-Moting/verletzungen/spieler/45660',
 'https://www.transfermarkt.de/Marc Roca/verletzungen/spieler/336869']
injury_list = []
name_list = []

通过下面的代码,我得到了所有 playerLinks 的所有伤害列表。但是,这些列表的大小不同。我需要每个球员的名字在那个特定球员的伤病旁边。

我尝试了以下方法:但是,injury_list 的长度是一个随机数字,而不是每个玩家的数字。我如何获得玩家伤害列表的长度?为了让我在伤病旁边有正确的名字。

for p in range(len(playerLinks)):
    page = playerLinks[p]
    response = requests.get(page, headers={'User-Agent': 'Custom5'})
    print(response.status_code)
    injury_data = response.text
    soup = BeautifulSoup(injury_data, 'html.parser')
    table = soup.find(id="yw1")
    injurytypes = table.select("td[class='hauptlink']")
    
        
    for j in range(len(injurytypes)):
            all_injuries = [injury.text for injury in injurytypes]
            injury_list.extend(all_injuries)

    image = soup.find("div", {"class": "dataBild"})
    for j in range(len(image)):
            names = image.find("img").get("title")
            name_list.append(''.join(names))
            name_list_def = name_list * len(injury_list)

通过 img 标签,我得到了玩家的名字。你有什么建议吗?

非常感谢!

标签: pythonweb-scrapinglinked-list

解决方案


player_inj_numb=[]

for url in (playerLinks):  
    player_name = url.split('/')[3]
    response = requests.get(url, headers={'User-Agent': 'Custom5'})
    print(response.status_code)
    injury_data = response.text
    soup = BeautifulSoup(injury_data, 'html.parser')
    table = soup.find(id="yw1")
    nbInjury = len(table.findAll("tr"))
    player_inj_numb.append((player_name,nbInjury-1))
    
print(player_inj_numb)

输出:

[('Serge Gnabry', 15), ('Jamal Musiala', 0), ('Douglas Costa', 15), ('Joshua Kimmich', 12), ('Alexander Nübel', 2), ('Kingsley Coman', 15), ('Christopher Scott', 0), ('Corentin Tolisso', 14), ('Leon Goretzka', 15), ('Javi Martínez', 15), ('Tiago Dantas', 0), ('Robert Lewandowski', 15), ('Lucas Hernández', 15), ('Josip Stanisic', 8), ('Thomas Müller', 13), ('Benjamin Pavard', 9), ('Bouna Sarr', 8), ('Leroy Sané', 11), ('Manuel Neuer', 15), ('David Alaba', 15), ('Niklas Süle', 13), ('Tanguy Nianzou', 4), ('Ron-Thorben Hoffmann', 4), ('Jérôme Boateng', 15), ('Alphonso Davies', 3), ('Eric Maxim Choupo-Moting', 15), ('Marc Roca', 7)]

我从 url 中得到了这个名字,因为它已经在那里了,不需要额外的抓取。

伤害数等于表中的行数减去作为表头的第一行。

请注意,有些球员的伤病超过 15 次,因此在这些情况下您需要获取后续页面。


推荐阅读