一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 开发人员小李在使用Python爬虫从企查查抓取公司工商信息时,遇到选择器失效和动态加载内容无法解析的问题。通过分析日志和网页结构变化,发现关键数据由JavaScript动态渲染。解决方案包括引入Selenium模拟浏览器行为、配置代理IP和请求头、调整选择器,并优化代码实现。最终成功解决了数据采集问题,确保了爬虫的稳定性和可靠性。改进方案还涉及动态加载应对策略、选择器稳定性保障及代理池搭建等措施,以应对未来可能的变化。

时间轴呈现事故进程

  • 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。
  • 17:15:小李发现,尽管请求能正常返回 HTML 页面,但关键数据(公司名称、法人代表、注册资本)的定位选择器失效,抓取到的内容为空或错误。初步判断是网页结构发生了不可预料的变化。
  • 17:30:尝试更新选择器,但新问题接踵而至:动态加载的内容无法被解析,数据仍然缺失。

分析式线索追踪

本地测试日志片段

# 爬虫日志输出
[17:15:23] INFO - 发送 GET 请求至 https://www.qcc.com,状态码 200,请求成功。
[17:15:25] ERROR - 选择器失效!无法找到公司名称元素 (selector: #companyName)。
[17:15:30] DEBUG - HTML 快照保存至 ./snapshots/qcc_17_15_25.html,便于后续分析。

网页结构与选择器对比

  • 原始选择器<font style="color:rgb(38, 38, 38);">#companyName</font> 用于定位公司名称。
  • 快照 HTML 分析:发现 <font style="color:rgb(38, 38, 38);"><div id="companyName"></font> 标签已不存在,取而代之的是动态加载的 <font style="color:rgb(38, 38, 38);"><div class="loader"></font><font style="color:rgb(38, 38, 38);"><script></font> 标签。

解决方案探寻过程

  1. 重新审视网页加载过程
    • 使用浏览器开发者工具(F12)查看网页加载流程,发现关键信息是通过 JavaScript 动态渲染的,原先的静态 HTML 并不含有所需数据。
    • 临时策略:引入 Selenium 模拟浏览器行为,确保 JavaScript 执行,完整加载页面。
  2. 代理 IP 与反爬机制突破
# 引入爬虫代理 IP配置
proxies = {
   
    'http': 'http://用户名:密码@域名:端口',
    'https': 'https://用户名:密码@域名:端口',
}
response = requests.get(url, proxies=proxies)
- <font style="color:rgb(38, 38, 38);">企查查对频繁请求有严格限制,需借助代理 IP。参考亿牛云爬虫代理参数(域名、端口、用户名、密码),设置代码:</font>
  1. Cookie 和 User-Agent 设置
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Cookie': 'your-cookie-string'  # 替换为实际有效 Cookie
}
- <font style="color:rgb(38, 38, 38);">仿制正常浏览器行为,避免被服务器识别为爬虫:</font>
  1. 调试选择器工具选择
    • 使用 BeautifulSoup 或 lxml 库解析渲染后的 HTML,结合 XPath 和 CSS 选择器重新定位元素。

改进后的代码实现

# 企查查数据采集解决方案
import requests
from bs4 import BeautifulSoup

# 设置代理IP(亿牛云爬虫代理示例 www.16yun.cn)
PROXY_USERNAME = '16YUN'  # 替换为实际用户名
PROXY_PASSWORD = '16IP'  # 替换为实际密码
PROXY_DOMAIN = 'proxy.16yun.cn'
PROXY_PORT = '8080'

# 配置代理
proxies = {
   
    'http': f'http://{PROXY_USERNAME}:{PROXY_PASSWORD}@{PROXY_DOMAIN}:{PROXY_PORT}',
    'https': f'https://{PROXY_USERNAME}:{PROXY_PASSWORD}@{PROXY_DOMAIN}:{PROXY_PORT}',
}

# 设置请求头
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Cookie': 'your-cookie-string'  # 替换为实际有效的 Cookie
}

# 爬取目标 URL
url = "https://www.qcc.com"

# 发送请求
response = requests.get(url, headers=headers, proxies=proxies)
response.encoding = 'utf-8'  # 设置正确编码

# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')

# 示例:解析公司信息(需根据实际页面结构调整选择器)
company_name = soup.select_one('.company-name')  # 假设 .company-name 是公司名称的类名
if company_name:
    print(f"公司名称: {company_name.text.strip()}")
else:
    print("未能获取公司名称!")

legal_representative = soup.select_one('.legal-rep')  # 假设 .legal-rep 是法人代表的类名
if legal_representative:
    print(f"法人代表: {legal_representative.text.strip()}")
else:
    print("未能获取法人代表信息!")

registered_capital = soup.select_one('.reg-capital')  # 假设 .reg-capital 是注册资本的类名
if registered_capital:
    print(f"注册资本: {registered_capital.text.strip()}")
else:
    print("未能获取注册资本信息!")

架构改进方案

  • 动态加载应对策略:采用 Selenium / Playwright 等框架,模拟人类交互行为加载完整页面。
  • 选择器稳定性保障:利用 XPath 表达式,结合多个属性定位元素;定期更新长效选择器库。
  • 代理池搭建:引入多 IP 代理池,轮询使用不同 IP,提高请求成功率。
  • 数据清洗与过滤:构建专用的数据清洗规则集,去除冗余、异常数据,提升数据质量。

总结

本次故障源于网页动态加载机制与选择器不匹配,辅以合理的代理 IP、请求头配置及动态加载调试工具,成功解决数据采集问题。在爬虫项目中,持续关注目标网站更新动态、优化选择器策略、升级反爬规避方案,是保障数据稳定性抓取的关键。
相关文章
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
8天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
2802 112
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
3天前
|
云安全 边缘计算 人工智能
对话|ESA如何助力企业高效安全开展在线业务?
ESA如何助力企业安全开展在线业务
1022 8
|
7天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1529 9
阿里云PAI部署DeepSeek及调用
|
6天前
|
人工智能 自然语言处理 JavaScript
宜搭上新,DeepSeek 插件来了!
钉钉宜搭近日上线了DeepSeek插件,无需编写复杂代码,普通用户也能轻松调用强大的AI大模型能力。安装后,平台新增「AI生成」组件,支持创意内容生成、JS代码编译、工作汇报等场景,大幅提升工作效率。快来体验这一高效智能的办公方式吧!
1417 6
|
3天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
15天前
|
Linux iOS开发 MacOS
deepseek部署的详细步骤和方法,基于Ollama获取顶级推理能力!
DeepSeek基于Ollama部署教程,助你免费获取顶级推理能力。首先访问ollama.com下载并安装适用于macOS、Linux或Windows的Ollama版本。运行Ollama后,在官网搜索“deepseek”,选择适合你电脑配置的模型大小(如1.5b、7b等)。通过终端命令(如ollama run deepseek-r1:1.5b)启动模型,等待下载完成即可开始使用。退出模型时输入/bye。详细步骤如下图所示,轻松打造你的最强大脑。
9563 86
|
1月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171379 18
|
7天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。
|
4天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。