Pandas возвращает пустой фрейм данных при попытке очистить таблицу - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь получить историю переводов 500 лучших игроков на Transfermarkt . Мне удалось (с некоторой помощью), чтобы l oop через каждый профиль игрока и очищенное изображение и имя. Теперь мне нужна история переводов, которую можно найти в таблице на каждом профиле игрока: Профиль игрока enter image description here

Я хочу сохранить таблицу в фрейм данных, используя Pandas, а затем запишите его в CSV с Season, Date et c в качестве заголовков. Для Монако и ПСЖ, например, я просто хочу названия клубов, а не фотографии или национальность. Но сейчас все, что я получаю, это:

Empty DataFrame
Columns: []
Index: []

Ожидаемый результат:

Season         Date    Left Joined       MV      Fee
0  18/19  Jul 1, 2018  Monaco    PSG  120.00m  145.00m

Я просмотрел источник и проверил страницу, но не могу найти ничего, что могло бы помочь я, кроме этого, tbody и tr. Но как я это делаю, я хочу уточнить эту таблицу, поскольку есть еще несколько.

Это мой код:

import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd

site = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}

result = []

def main(url):
    with requests.Session() as req:
        result = []
        for item in range(1, 21):
            print(f"Collecting Links From Page# {item}")
            r = req.get(url.format(item), headers=headers)
            soup = BeautifulSoup(r.content, 'html.parser')

            tr = soup.find_all("tbody")[1].find_all("tr", recursive=False)

            result.extend([
                { 
                    "Season": t[1].text.strip()

                }
                for t in (t.find_all(recursive=False) for t in tr)
            ])

df = pd.DataFrame(result)

print(df)

1 Ответ

3 голосов
/ 09 апреля 2020
import requests
from bs4 import BeautifulSoup
import pandas as pd

site = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}


def main(url):
    with requests.Session() as req:
        links = []
        names = []

        for item in range(1, 21):
            print(f"Collecting Links From Page# {item}")
            r = req.get(url.format(item), headers=headers)
            soup = BeautifulSoup(r.content, 'html.parser')
            urls = [f"{url[:29]}{item.get('href')}" for item in soup.findAll(
                "a", class_="spielprofil_tooltip")]
            ns = [item.text for item in soup.findAll(
                "a", class_="spielprofil_tooltip")][:-5]
            links.extend(urls)
            names.extend(ns)
    return links, names


def parser():
    links, names = main(site)
    for link, name in zip(links, names):
        with requests.Session() as req:
            r = req.get(link, headers=headers)
            df = pd.read_html(r.content)[1]
            df.loc[-1] = name
            df.index = df.index + 1
            df.sort_index(inplace=True)
            print(df)


parser()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...