跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 爬虫实战:获取中国农药信息网登记数据

综述由AI生成如何使用 Python 爬虫技术抓取中国农药信息网的农药登记数据。通过 requests 库发送 POST 请求,配合 lxml 库解析 HTML 表格,最终将数据保存为 CSV 文件。文章详细分析了请求头设置、POST 参数构造、文件编码处理及 XPath 解析逻辑,并提供了完整的源代码和运行结果示例。同时强调了反爬虫策略应对、法律合规性及代码维护的注意事项,适合希望学习数据采集技术的开发者参考。

极客工坊发布于 2025/2/6更新于 2026/6/220 浏览
Python 爬虫实战:获取中国农药信息网登记数据

一、爬取目标

本文旨在通过 Python 编写爬虫程序,抓取中国农药信息网(ICAMA)的农药登记数据。该网站提供了详细的农药产品登记信息,包括登记证号、农药名称、类别、剂型、含量及有效期等关键数据。通过自动化脚本提取这些数据并保存为 CSV 文件,可方便地进行后续的数据分析或整理。

二、环境准备

在开始之前,请确保已安装以下 Python 库:

  • requests:用于发送 HTTP 请求。
  • lxml:用于解析 HTML 文档,支持 XPath 查询。
  • prettytable:用于在控制台美观地打印表格数据。
  • csv:Python 标准库,用于处理 CSV 文件读写。

安装命令如下:

pip install requests lxml prettytable

三、完整源码

以下是完整的 Python 脚本代码,包含请求发送、数据解析、结果打印及文件保存功能。

import csv
import requests
from lxml import etree
from prettytable import PrettyTable

def getData(baseUrl, data, headers):
    """
    发送 POST 请求并解析返回的 HTML 表格数据
    :param baseUrl: 请求地址
    :param data: 请求载荷参数
    :param headers: 请求头信息
    :return: 解析后的列表数据
    """
    response = requests.post(url=baseUrl, data=data, headers=headers)
    # 设置响应编码,防止乱码
    response.encoding = 'utf-8'
    html = etree.HTML(response.text)
    
    # 定位表格中的行
    trs = html.xpath("//table[@id='tab']/tr")
    result_data = []
    
    for index, tr in enumerate(trs):
        text = tr.xpath("td//text()")
        # 跳过表头行 (index != 0)
        if index != 0 and len(text) > 7:
            # 根据实际页面结构提取对应列的数据
            # 注意:索引可能随页面更新变化,需根据实际情况调整
            row = [
                text[1].strip(),      # 登记证号
                text[],              
                text[],              
                text[],              
                text[],              
                text[],              
                text[].strip()       
            ]
            result_data.append(row)
     result_data

 ():
    
    table = PrettyTable()
    table.field_names = [, , , , , , ]
    table.add_rows(result)
    (table)

 ():
    
    filename = 
    :
         (filename, , encoding=, newline=)  file:
            writer = csv.writer(file)
            writer.writerows(result)
        ()
     Exception  e:
        ()

 ():
    baseUrl = 
    headers = {
        : ,
        : 
    }
    
    data = (
        
        
        
        
        
    )
    
    ()
    result = getData(baseUrl, data, headers)
    
     result:
        printData(result)
        saveData(result)
    :
        ()

 __name__ == :
    main()
3
# 农药名称
4
# 农药类别
5
# 剂型
6
# 总含量
7
# 有效期至
9
# 登记证持有人
return
def
printData
result
""" 使用 PrettyTable 在控制台打印结果 """
"登记证号"
"农药名称"
"农药类别"
"剂型"
"总含量"
"有效期至"
"登记证持有人"
print
def
saveData
result
""" 将数据保存为 CSV 文件 """
'农药登记数据.csv'
try
with
open
'w'
'utf-8-sig'
''
as
print
f"数据已保存至 {filename}"
except
as
print
f"保存文件时发生错误:{e}"
def
main
'https://www.icama.cn/BasicdataSystem/pesticideRegistration/queryselect.do'
'Content-Type'
'application/x-www-form-urlencoded'
'User-Agent'
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36'
# 构造请求参数,pageSize 设置为较大值以获取尽可能多的数据
"pageNo=1&pageSize=50000&djzh=&nymc=&cjmc=&sf=&nylb="
"&zhl=&jx=&zwmc=&fzdx=&syff=&dx=&yxcf=&yxcf_en="
"&yxcfhl=&yxcf2=&yxcf2_en=&yxcf2hl=&yxcf3=&yxcf3_en="
"&yxcf3hl=&yxqs_start=&yxqs_end=&yxjz_start=&yxjz_end="
"&accOrfuzzy=2"
print
"正在获取数据..."
if
else
print
"未获取到有效数据,请检查网络或页面结构是否变更。"
if
"__main__"

四、源码简析

1. 请求头与请求载荷

通过分析浏览器开发者工具(F12),可以确定该网站的接口属于 POST 请求。服务器端期望接收的数据格式为 application/x-www-form-urlencoded。

  • Content-Type:告知服务器传输的数据类型。常见的类型包括 application/json(JSON 格式)、multipart/form-data(文件上传)等。本例中使用表单提交。
  • User-Agent:模拟浏览器的标识,防止被服务器识别为脚本而拦截。
  • Payload (data):包含分页信息(pageNo, pageSize)以及筛选条件(如农药名称、类别等)。本示例中设置了较大的 pageSize 以尝试一次性获取较多数据。
2. 文件编码处理

在使用 Python 的 open() 函数写入文件时,若未指定编码,默认会使用操作系统的本地编码(如 Windows 下常为 GBK)。当数据中包含非 ASCII 字符(如中文)时,GBK 编码可能导致 UnicodeEncodeError 错误。

解决方案是指定 encoding='utf-8' 或 utf-8-sig。推荐使用 utf-8-sig,因为它会在文件头部添加 BOM,确保 Excel 打开 CSV 文件时能正确识别中文编码,避免乱码。

3. 数据解析逻辑

使用 lxml.etree 库进行 HTML 解析比正则表达式更高效且稳定。通过 XPath 表达式 //table[@id='tab']/tr 定位到目标表格的所有行,再遍历每一行的 td 元素提取文本内容。需注意,网页结构可能会更新,因此 XPath 路径可能需要根据实际页面动态调整。

五、运行结果

程序运行后,将在控制台输出表格形式的数据预览,并在当前目录下生成 农药登记数据.csv 文件。部分示例数据如下:

登记证号农药名称农药类别剂型总含量有效期至登记证持有人
PD20095400咯菌腈杀菌剂可湿性粉剂50%2029-4-26瑞士先正达作物保护有限公司
PD20141067氰烯·己唑醇杀菌剂悬浮剂20%2029-4-24陕西上格之路生物科学有限公司
PD20141065噻嗪·毒死蜱杀虫剂可湿性粉剂30%2029-4-24陕西上格之路生物科学有限公司
PD20141049吡蚜酮杀虫剂水分散粒剂70%2029-4-23福建新农大正生物工程有限公司
PD20095204乙烯利植物生长调节剂水剂40%2029-4-23侨昌现代农业有限公司

六、注意事项

  1. 反爬虫机制:目标网站可能设有频率限制或验证码。建议在请求之间添加随机延时(如 time.sleep(random.uniform(1, 3))),避免高频访问导致 IP 被封禁。
  2. 法律合规:本代码仅供技术学习与研究使用。请勿利用爬虫数据从事任何违反法律法规的业务,尊重网站的服务条款和知识产权。
  3. 数据维护:网页结构可能发生变更,若爬虫失效,请重新检查 HTML 结构并更新 XPath 选择器。
  4. 数据安全:生产环境中建议将敏感配置(如代理 IP、Cookie)放入配置文件,避免硬编码在代码中。

目录

  1. 一、爬取目标
  2. 二、环境准备
  3. 三、完整源码
  4. 四、源码简析
  5. 1. 请求头与请求载荷
  6. 2. 文件编码处理
  7. 3. 数据解析逻辑
  8. 五、运行结果
  9. 六、注意事项
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw Web UI 访问报错 Not Found 问题排查与解决
  • Pi0 机器人大模型基于昇腾 A2 的部署与性能实测
  • Python 文本乱码原因及解决方案
  • OpenClaw QQ 机器人接入指南
  • Spring Security 接入 SpringBoot 与前后端分离实战
  • 提示词工程(Prompt Engineering)全面指南
  • Devv AI:面向程序员的新一代搜索引擎与 GitHub 模式解析
  • 算法模拟专题题解
  • 数据结构核心:二叉树、堆与遍历算法实现
  • Mujoco 足式机器人强化学习:URDF 转 XML 配置指南
  • IO 多路复用 select 接口解析与服务器实战
  • 微信小程序 WebView 与 H5 页面双向通信实战指南
  • VR/AR/MR 技术详解:虚实交互的区别与核心应用
  • FAIR plus 2026 机器人全产业链接会前瞻
  • Python 内置函数 enumerate() 用法与原理
  • 大模型推理框架选型入门:Ollama、llama.cpp 与 vLLM 全景对比
  • 35 岁职场危机:如何应对裁员与转型挑战
  • 前端动画演进:告别 jQuery animate,拥抱现代方案
  • Flutter 三方库 flutter_dropzone 的鸿蒙化适配指南
  • JavaScript 核心语法与常用 API 速查

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online