修改代码,使其能生成一个excel表,excel表中内容为网页中的年份及省份,其中年份为行,省份为列import requests from bs4 import BeautifulSoup import re import xlwt headers={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.218.400 QQBrowser/12.1.5496.400"} url="https://data.stats.gov.cn/easyquery.htm?cn=E0103" r=requests.get(url,headers=headers) html = (r.text) soup = BeautifulSoup(html, "html.parser") all_years = soup.find_all("table", attrs={"class": "tr-title"}) all_princes = soup.find_all("table", attrs={"class": "table_container_column"}) for year in all_years: year_string = year.string if "/" not in year_string: print(year_string) for prince in all_princes: prince_string = prince.string if "/" not in prince_string: print(prince_string)
时间: 2025-03-28 10:00:34 浏览: 22
为了将年份和省份数据存储到Excel表格中,可以按照以下步骤修改您的代码:
### 修改后的代码
```python
import requests
from bs4 import BeautifulSoup
import re
import xlwt
# 请求头设置
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.218.400 QQBrowser/12.1.5496.400"
}
# URL请求
url = "https://data.stats.gov.cn/easyquery.htm?cn=E0103"
response = requests.get(url, headers=headers)
# 解析HTML页面
html_content = response.text
soup = BeautifulSoup(html_content, "html.parser")
# 提取所有年份信息
year_tables = soup.find_all("div", class_="treeYear")
years = []
for table in year_trees:
for a_tag in table.find_all('a'):
years.append(a_tag.text.strip())
# 提取所有省份信息
province_tables = soup.find_all("table", attrs={"class": "table_container_column"})
provinces = set()
for province_table in province_tables:
td_tags = province_table.find_all("td")
for td in td_tags:
provinces.add(td.text.strip())
provinces = list(provinces)
# 创建Excel工作簿并添加sheet页
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Years_and_Provinces')
# 写入表头(第一列为“年份”,其余为各省)
row_idx = 0
col_idx = 0
worksheet.write(row_idx, col_idx, '年份') # 第一列表头
col_idx += 1
for province in provinces:
worksheet.write(0, col_idx, province) # 各省作为表头写入第1行
col_idx += 1
# 将年份填充进每一行的第一列
for i, year in enumerate(years):
row_idx = i + 1 # 跳过标题行
worksheet.write(row_idx, 0, year) # 年份填入第i+1行、第1列
# 最终保存文件
file_name = './output.xls'
workbook.save(file_name)
print(f"Excel 文件已成功生成,路径为 {file_name}")
```
---
### 关键点说明:
1. **提取年份**
使用`BeautifulSoup`解析网页结构,并找到包含年份的标签(此处假设它们位于特定类名如`.treeYear`下),然后将其文本内容逐条存入列表。
2. **提取省份**
遍历所有的省份名称,通过集合去重后再转成列表形式。这一步避免了重复的数据记录。
3. **创建 Excel 表格**
利用 `xlwt` 库新建了一个工作薄和一张 sheet 页面,在首行放置各省市名称作为列标题;在首列依次插入每个年份数值作为行标题。
4. **数据写入规则**
每一行对应一个具体的年度,而每列则代表不同的地区统计项。
---
阅读全文
相关推荐
















