了解了你的需求,我们可以通过递归的方式来实现按层级下载并保存数据。首先,我们需要安装`requests`、`beautifulsoup4`和`openpyxl`这三个库。你可以使用以下命令安装它们:
pip install requests
pip install beautifulsoup4
pip install openpyxl
接下来,你可以使用下面的代码来实现你的需求:
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
def crawl_districts(url, sheet):
response = requests.get(url)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有的行政区划名单
table = soup.find('table', class_='countytable')
for tr in table.find_all('tr'):
tds = tr.find_all('td')
if len(tds) == 3:
code = tds[0].text.strip()
name = tds[1].text.strip()
sheet.append([code, name])
# 递归处理下一级行政区划
for a in soup.find_all('a'):
next_url = url.rsplit('/', 1)[0] + '/' + a['href']
crawl_districts(next_url, sheet)
def save_to_excel(data, filename):
wb = Workbook()
sheet = wb.active
sheet.title = '行政区划'
headers = ['编码', '名称']
sheet.append(headers)
for row in data:
sheet.append(row)
wb.save(filename)
if __name__ == "__main__":
url = 'https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html'
data = []
crawl_districts(url, data)
save_to_excel(data, 'E:/Temp/行政区划.xlsx')
这段代码中,我们定义了两个函数:`crawl_districts`用于爬取行政区划数据,`save_to_excel`用于将数据保存到Excel文件中。
`crawl_districts`函数接收两个参数:爬取的网页URL和要保存数据的工作表对象。在函数内部,我们首先发送HTTP请求获取网页内容,然后使用BeautifulSoup解析HTML。通过查找特定的HTML标签和属性,我们可以提取出行政区划的编码和名称,并将其添加到工作表中。
接着,我们使用递归的方法处理下一级行政区划。通过查找HTML中的链接,我们可以构造出下一级行政区划的URL,并将其传递给`crawl_districts`函数进行处理。
最后,我们定义了`save_to_excel`函数来保存数据到Excel文件中。我们创建一个工作簿(Workbook),设置工作表标题和表头,然后遍历数据将其添加到工作表中。最后,我们保存工作簿为指定的文件名。
在主程序中,我们指定了起始的网页URL和保存数据的文件路径,然后调用`crawl_districts`函数进行数据爬取,并将结果保存到Excel文件中。
请注意,在使用该代码之前,确保替换`url`变量为实际的网址,以及`save_to_excel`函数中的文件路径为你的实际路径。
希望这段代码能够满足你的需求,如果还有其他问题,请随时向我提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |