Double for l oop для извлечения данных из нескольких URL - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь получить данные с веб-сайта, чтобы записать их в файл Excel для работы. У меня есть основная схема URL, и мне нужно изменить «год» и «ссылочный номер» соответственно:

http://calcio-seriea.net/presenze/ «год» / «ссылочный номер» /

Я уже пытался написать часть кода, но у меня есть одна проблема. Прежде всего, я должен сохранить один и тот же год, в то время как контрольное число принимает каждое число из интервала 18. Затем год увеличивается на 1, а контрольное число снова принимает каждое число интервала 18. Я пытаюсь дать пример:

Y = 1998 RN = [1142:1159];
Y = 1999 RN = [1160:1177];
Y = 2000 RN = [1178:1195];
Y = … RN = …

Затем с 2004 года интервал становится равным 20, поэтому

Y = 2004 RN = [1250:1269];
Y = 2005 RN = [1270:1289];

До года = 2019 включительно.

Это код, который я мог бы сделать пока:

import pandas as pd

year = str(1998)

all_items = []

for i in range(1142, 1159):
    pattern = "http://calcio-seriea.net/presenze/" + year + "/" + str(i) + "/"

    df = pd.read_html(pattern)[6]

    all_items.append(df)

pd.DataFrame(all_items).to_csv(r"C:\Users\glcve\Desktop\data.csv", index = False, header = False)

print("Done!")

Заранее всем спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Все, что отсутствует, - это pd.concat из вашей функции, однако, поскольку вы вызываете один и тот же метод снова и снова, давайте напишем функцию, чтобы вы могли сохранить свой код dry.

def create_html_df(base_url, year,range_nums = ()):
    """
    Returns a dataframe from a url/html table
    base_url : the url to target
    year : the target year.
    range_nums = the range of numbers i.e (1,50)

   """
    start, stop = range_nums
    url_pat = [f"{base_url}/{year}/{i}" for i in range(start,stop)]
    dfs = []
    for each_url in url_pat:
        df = pd.read_html(each_url)[6]
        dfs.append(df)

    return pd.concat(dfs)

final_df = create_html_df(base_url = "http://calcio-seriea.net/presenze/",
               year = 1998,
               range_nums = (1142, 1159))
...