python - 双 for 循环从多个 url 中提取数据
问题描述
我正在尝试从网站获取数据以将它们写入要处理的 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!")
提前感谢大家
解决方案
所缺少的只是pd.concat
你的函数中的一个,但是当你一遍又一遍地调用相同的方法时,让我们编写一个函数,这样你就可以保持你的代码干燥。
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))
推荐阅读
- javascript - Vue.js - 如何在数组对象上实现计算属性?
- c# - Dapper 无法从 SELECT CASE 查询中找到 POCO 映射
- javascript - 如何获取 OpenUI5 绑定信息
- python - 如何从python调用curl命令
- c# - 如何在双击时简单地将当前选定的 DataGridRow 项目发送到 ViewModel 中的 ICommand
- c# - c# Nhibernate 创建带有动态参数的查询
- r - 如何在数据表中插入新旧日期之间的所有缺失周以计算每周库存 R
- numpy - 概率分布,如 x^2
- powershell - 错误:尝试将对象添加到名称已在使用的目录中
- python - 即使只有部分匹配,如何使 if 语句为真?