You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python采集县级政府网站联系信息的技术求助

针对三个Python任务的分步指导

一、获取全国县级政府网站列表

对于初学者,推荐从省级政府官网的区县导航板块入手,这些页面通常会整理下属区县的政府网站链接,步骤如下:

  1. 安装依赖库:
    pip install requests beautifulsoup4
    
  2. 示例代码(以某省级政府网站为例,需替换成目标省份的区县页面URL):
    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)}")
    
    注意:不同省份页面结构不同,需打开目标页面开发者工具(F12)查看HTML结构,调整select方法的选择器。

二、提取政府官员的姓名、邮箱及电话号码

拿到区县网站URL后,进入对应的领导信息/机构领导页面提取信息,步骤如下:

  1. 用Python内置的正则表达式模块匹配邮箱和电话,无需额外安装
  2. 示例代码(承接上面的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库快速导出数据,步骤如下:

  1. 安装依赖库:
    pip install pandas openpyxl  # openpyxl用于支持Excel导出
    
  2. 示例代码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:05:21