遍历 URL

2024-04-20 13:54:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过遍历URL并将收集到的数据添加到一个列表中,从而从网站中获取数据。我知道它并不漂亮(非常新),但在迭代之前,我对一切都很满意:

for date in date_list: # iterate through dates
        weather_list = pd.read_html(base_url + 'KOWD' + '/' + year + '/' + month + '/' + day + end_url)

我知道在for语句中,为了遍历它们,我必须调用year、month、day,但是我认为通过在dataframe中声明它们,它们将被识别为列表。有人有什么建议吗?不能通过这个!在

^{pr2}$

Tags: 数据inurl列表fordate网站year
2条回答

只需迭代daterange中的日期会更简单:

daterange = pd.date_range(start_date, end_date)
url_template = base_url + 'KOWD/{d.year}/{d.month}/{d.day}' + end_url
for date in daterange:
    url = url_template.format(d=date)
    weather_list = pd.read_html(url)
    # etc.

如果这对您有效,那么您可以删除在数据帧中存储日期的所有后续代码,将其更改为字符串,并为年、月和日期创建单独的列。在

如果您确实需要创建日期的数据框,可以执行以下操作:

^{pr2}$

然后可以迭代抛出行。在

for index, row in date_list.iterrows():
    url = url_template.format(d=row)
    weather_list = pd.read_html(url)
    # etc.

然后考虑您希望weather_list输出的格式。如果刮取的信息不适合包含在数据帧中,那么作为{date: table}对的字典可能更有意义。在

编辑:例如,如果要从每页中选择第三个表并将其与日期连接到一个数据帧中,可以执行以下操作:

weather_dict = {}
for date in daterange:
    table = pd.read_html(url, header=0)[2]
    table.set_index(table.columns.values[0], inplace=True)
    table.index.set_names(None, inplace=True)
    weather_dict[date] = table

weather_df = pd.concat(weather_dict)

变量yearmonth和{}属于<class 'pandas.core.series.Series'>类型。你需要在循环时访问它们。考虑下面的代码。在

for i in range(0,len(date_list)): # iterate through dates
    weather_list = pd.read_html(base_url + 'KOWD' + '/' + year[i] + '/' + month[i] + '/' + day[i] + end_url)
    #print(type(weather_list))
    weather_list = weather_list[4] # this is the table of values I want
    weather_list.append(date_list.iloc[i])

注意:在运行这段代码时,您提到的IndexError已得到解决,但我在weather_list = weather_list[4]行上得到了错误。我检查过了,len(weather_list)总是4。当然,这是一个单独的问题,因为list index out of range在这种情况下肯定会发生。在

相关问题 更多 >