基于Python采集县级政府网站联系信息的技术求助
针对三个Python任务的分步指导
一、获取全国县级政府网站列表
对于初学者,推荐从省级政府官网的区县导航板块入手,这些页面通常会整理下属区县的政府网站链接,步骤如下:
- 安装依赖库:
pip install requests beautifulsoup4 - 示例代码(以某省级政府网站为例,需替换成目标省份的区县页面URL):
注意:不同省份页面结构不同,需打开目标页面开发者工具(F12)查看HTML结构,调整import requests from bs4 import BeautifulSoup # 替换成目标省级政府的区县导航页面URL base_url = "http://www.example.gov.cn/quxian/" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} try: response = requests.get(base_url, headers=headers) response.encoding = response.apparent_encoding # 解决编码乱码问题 soup = BeautifulSoup(response.text, "html.parser") # 查找所有区县网站链接(需根据实际页面HTML结构调整选择器) county_links = soup.select("div.quxian-list a") # 提取URL和区县名称 county_websites = [] for link in county_links: name = link.get_text(strip=True) url = link["href"] # 处理相对链接,补全为完整URL if not url.startswith("http"): url = base_url + url county_websites.append({"区县名称": name, "网站URL": url}) print(f"共获取到{len(county_websites)}个区县政府网站") except Exception as e: print(f"爬取失败:{str(e)}")select方法的选择器。
二、提取政府官员的姓名、邮箱及电话号码
拿到区县网站URL后,进入对应的领导信息/机构领导页面提取信息,步骤如下:
- 用Python内置的正则表达式模块匹配邮箱和电话,无需额外安装
- 示例代码(承接上面的
county_websites列表):
注意:若区县网站领导页面路径不固定,可先爬取网站导航栏,自动识别“领导信息”类链接再跳转。import re # 定义正则表达式,匹配邮箱和手机号/固定电话 email_pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b') phone_pattern = re.compile(r'\b(1[3-9]\d{9}|0\d{2,3}-\d{7,8})\b') official_info_list = [] for site in county_websites: county_name = site["区县名称"] site_url = site["网站URL"] # 替换成该区县网站的领导信息页面URL,或自动查找导航栏里的领导页面链接 leader_url = site_url + "leaders/" # 示例路径,实际需根据网站调整 try: response = requests.get(leader_url, headers=headers) response.encoding = response.apparent_encoding soup = BeautifulSoup(response.text, "html.parser") # 查找领导信息块(需根据页面结构调整选择器) leader_items = soup.select("div.leader-item") for item in leader_items: # 提取姓名(假设姓名在h3标签内) name = item.select_one("h3").get_text(strip=True) if item.select_one("h3") else "未知" # 提取模块内文本,匹配邮箱和电话 text_content = item.get_text() emails = email_pattern.findall(text_content) phones = phone_pattern.findall(text_content) # 整理信息 official_info = { "区县名称": county_name, "网站URL": site_url, "官员姓名": name, "电子邮箱": ",".join(emails) if emails else "无", "联系电话": ",".join(phones) if phones else "无" } official_info_list.append(official_info) except Exception as e: print(f"处理{county_name}网站失败:{str(e)}")
三、导出为Excel或CSV文件
用pandas库快速导出数据,步骤如下:
- 安装依赖库:
pip install pandas openpyxl # openpyxl用于支持Excel导出 - 示例代码:
import pandas as pd # 将列表转换为DataFrame格式 df = pd.DataFrame(official_info_list) # 导出CSV文件(utf_8_sig编码避免乱码) df.to_csv("区县官员联系信息.csv", index=False, encoding="utf_8_sig") # 导出Excel文件 df.to_excel("区县官员联系信息.xlsx", index=False) print("文件导出完成")
额外提示
- 爬取政府网站时,要遵守网站
robots.txt规则,可添加time.sleep(1)控制请求间隔,避免给服务器造成压力。 - 部分网站有反爬机制,初学者可先从无反爬的网站入手测试。
内容的提问来源于stack exchange,提问作者user21213679
相关产品推荐
相关产品推荐

