非常抱歉造成您的困扰。我在代码中发现了一个错误,导致数据没有被正确写入Excel文件。下面是修复后的代码:
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
# 获取网页内容
def get_html(url):
response = requests.get(url)
response.encoding = 'gb2312' # 设置编码为 gb2312
return BeautifulSoup(response.text, 'html.parser')
# 获取链接前缀
def get_prefix(url):
prefix = url.split('/')
prefix.pop()
prefix = '/'.join(prefix) + '/'
return prefix
# 递归抓取下一页面
def spider_next(url, lev, sheet):
if lev == 2:
spider_class = "citytr"
elif lev == 3:
spider_class = "countytr"
elif lev == 4:
spider_class = "towntr"
else:
spider_class = "villagetr"
for item in get_html(url).select("tr." + spider_class):
item_td = item.select("td")
item_td_code = item_td[0]
item_td_name = item_td[-1]
item_href = item_td_code.select_one("a")
if item_href is not None:
href = item_href.get("href")
spider_next(get_prefix(url) + href, lev + 1, sheet)
item_code = item_td_code.text.strip()
item_name = item_td_name.text.strip()
# 输出:级别、区划代码、名称
content = f"{lev}\t{item_code}\t{item_name}"
print(content)
sheet.append([lev, item_code, item_name]) # 将内容写入表格
# 主程序
if __name__ == '__main__':
province_url = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html"
province_list = get_html(province_url).select('tr.provincetr a')
wb = Workbook()
sheet = wb.active
sheet.title = "行政区划"
# 写入表头
sheet.append(["级别", "区划代码", "名称"])
for index, province in enumerate(province_list, start=2):
href = province.get("href")
province_code = href[:2] + '0000000000'
province_name = province.text.strip()
content = f"1\t{province_code}\t{province_name}"
print(content)
sheet.append([1, province_code, province_name])
provincial_city_url = get_prefix(province_url) + href
spider_next(provincial_city_url, 2, sheet)
# 保存xlsx文件
wb.save(r'E:\Temp\区划代码.xlsx')
这次修复的问题是在将数据写入到Excel文件时,使用了`sheet.append()`方法,并且传递了一个列表作为参数,以便将数据按行写入。同时,代码还修复了获取区划代码的错误,确保了数据的正确性。
请尝试运行修复后的代码,应该可以正常下载行政区划数据并将其保存到Excel文件中。如果您还有其他问题,请随时向我提问。非常感谢您的耐心和理解!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |