链接到表:https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=all&页面=0
此表从第0页转到第27页。
我已经成功地将表刮成了第0页的pandas df:
url = 'https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=all&page=0'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
#getting the table
table = soup.find('table', {'class':'views-table views-view-table cols-20'})
headers = []
for i in table.find_all('th'):
title = i.text.strip()
headers.append(title)
df = pd.DataFrame(columns = headers)
for row in table.find_all('tr')[1:]:
data = row.find_all('td')
row_data = [td.text.strip() for td in data]
length = len(df)
df.loc[length] = row_data
现在我需要对所有页面执行同样的操作,并将其存储到一个df中
您可以使用pandas.read_html
将表解析为数据帧,然后连接它们:
import pandas as pd
url = "https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=all&page={}"
all_df = []
for page in range(0, 10): # <-- increase number of pages here
print("Getting page", page)
all_df.append(pd.read_html(url.format(page))[0])
final_df = pd.concat(all_df).reset_index(drop=True)
print(final_df.tail(10).to_markdown(index=False))
日期 | 20年 | 30年 | 外推因子 | >8周银行折扣th style="text align=right;">52周银行折扣 | COUPON等效。1个月 | 3 Yr | 5 Yr | 7年 | 10年 | 20年 | 30年 |
---|---|---|---|---|---|---|---|---|---|---|---|
2001年12月13日 | nan | >td style="text align:right">nannan/td> | 1.69 | nan | 1.69 | 5.81 | 5.53 | ||||
2001年12月14日 | nan | nan | 1.7 | nan | 1.73 | 5.89 | 5.59 | ||||
2001年12月17日 | nan | nan | 1.72 | nan | 1.74 | 5.91 | 5.61 | ||||
2001年12月18日 | nan | nan | 1.72 | nan | 1.71 | 5.81 | 5.52 | ||||
2001年12月19日 | nan | nan | 1.69 | nan | 1.69 | 5.73 | 5.45 | ||||
2001年12月20日 | nan | nan | nan | nan align:right;">1.67 | nan | 1.69 | 5.73>5.43 | ||||
2001年12月21日 | nan | 1.67 | nan | 1.71 | 5.76 | 5.45 | |||||
2001年12月24日 | nan | nan | nan | nan | an align:right;">1.66nan | 1.72 | 5.81 | 5.49 | |||
2001年12月26日 | nan | nan | 1.77 | nan | 1.75 | 5.84 | 5.52 | ||||
2001年12月27日 | nan | 1.75 | nan | 1.74 | 5.78 | 5.49 |