用python完成(1)爬取指定网址的金属铜的库存数据(包括库存和库存变动),保存在本地(csv文件) 网址:https://data.eastmoney.com/ifdata/kcsj.html (2)提供每日更新功能,用每日更新的数据,更新本地库存数据。 (3)计算最近一周和最近一月库存变动比例,存入上述数据文件中。
时间: 2023-05-23 21:05:39 浏览: 191
A:
1)爬取金属铜的库存数据,并保存在本地csv文件中:
``` python
import requests
import csv
from bs4 import BeautifulSoup
#设置访问网址
url = "https://data.eastmoney.com/ifdata/kcsj.html"
#使用requests模块发送GET请求
response = requests.get(url)
#使用BeautifulSoup解析HTML页面
soup = BeautifulSoup(response.text, "html.parser")
#获取表格中的数据
table_data = soup.find_all("tr")
#创建csv文件,并写入数据
with open("copper_inventory.csv", "w", encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile)
#遍历表格数据,写入csv文件
for row in table_data:
#获取表格每一行的数据
td_list = row.find_all("td")
td_data = []
#将数据填充到列表中
for td in td_list:
td_data.append(td.text.strip())
#写入到csv文件中
writer.writerow(td_data)
```
2)实现每日更新功能,使用同样的方法获取新的数据并追加到本地csv文件中:
``` python
import requests
import csv
from bs4 import BeautifulSoup
#设置访问网址
url = "https://data.eastmoney.com/ifdata/kcsj.html"
#使用requests模块发送GET请求
response = requests.get(url)
#使用BeautifulSoup解析HTML页面
soup = BeautifulSoup(response.text, "html.parser")
#获取表格中的数据
table_data = soup.find_all("tr")
#打开csv文件,将新数据追加到文件中
with open("copper_inventory.csv", "a", encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile)
#遍历表格数据,写入csv文件
for row in table_data:
#获取表格每一行的数据
td_list = row.find_all("td")
td_data = []
#将数据填充到列表中
for td in td_list:
td_data.append(td.text.strip())
#写入到csv文件中
writer.writerow(td_data)
```
3)计算最近一周和最近一月库存变动比例,存入上述数据文件中:
可以通过使用pandas模块来进行数据处理和计算。首先使用pandas读取本地csv文件,并将最近一周和一月的数据筛选出来。接着,使用pandas自带的计算函数计算变动比例,最后将结果保存写入到csv文件中:
``` python
import pandas as pd
import numpy as np
#读取本地csv文件
df = pd.read_csv("copper_inventory.csv", encoding='utf-8')
#筛选最近一周的数据
recent_week = df[df['日期'] > pd.Timestamp.today() - pd.Timedelta(days=7)]
#筛选最近一月的数据
recent_month=df[df['日期'] > pd.Timestamp.today() - pd.Timedelta(days=30)]
#计算最近一周和最近一月的数据变动比例
recent_week['库存变动比例'] = recent_week['库存'].astype(float).pct_change().replace([np.inf,-np.inf,np.nan],0)
recent_month['库存变动比例'] = recent_month['库存'].astype(float).pct_change().replace([np.inf,-np.inf,np.nan],0)
#将结果写入到csv文件
recent_week.to_csv('copper_inventory.csv',mode ='w', encoding='utf-8',header=True, index=False)
recent_month.to_csv('copper_inventory.csv', mode='a', encoding='utf-8',header=False, index=False)
```
阅读全文