Lazy loaded image
技术分享
爬虫案例
字数 620阅读时长 2 分钟
2025-2-16
2025-3-11
type
status
date
slug
summary
tags
category
icon
password
📌
我虽然没有系统性地学习过爬虫技术,但在需要时会通过 Python 进行简单实现。 在实践过程中学习,这里记录下对不同网站应该如何进行爬取。
 

案例1

背景

女朋友要每天刷公告:https://www.chinamoney.com.cn/chinese/zdsx/。需要关注公告中有没有出现关键词,还有一个几百个公司的关注列表,刷起来比较麻烦。
要爬取的网站长这样
要爬取的网站长这样

解决方案

  • 每天自动爬取前一天的公告中包含【关键词】+【公司名列表】的公告,并通知给她。
  • 对比网页源代码和 F12 中的元素选项卡,发现要爬取的网页元素是动态的。
  • 查看 Fetch/XHR 请求,定位到相应中返回想要内容的请求:
notion image
Fetch/XHR 是浏览器网络请求面板中的一个分类,用于显示页面发起的 AJAX 异步请求和 API 调用。
  • 右键复制为 cURL (Bash),填入 Convert curl commands to code 中,得到对 api 发起请求的 Python 代码。响应内容是 JSON 格式,使用 response.json() 方法将其解析为 Python 字典。
  • 拓展成完整的自动化脚本,逐步完善爬取逻辑。

技术实现

  • 通知方式:发送邮件

遇到的问题

  • 问题1
    • 本地开了全局代理+规则模式,刚开始使用 requests 库来做请求,发现有时报 403 错误。
    • 原因是 requests 库会走全局代理,
  • 问题2
    • 想通过 Github Actions 部署,但是该 api 似乎对来自 Github 的 ip 进行了屏蔽。似乎不是这个原因。
    • 根据实验,更换代理,使用不同的ip访问先用浏览器正常加载一次页面,之后就可以通过这个 api 获取数据了。
    • 所以修改代码,先用 playwright 动态加载一次页面,之后就可以通过这个 api 获取数据了。
Playwright 是一个自动化浏览器测试工具,可以模拟真实用户在浏览器中的操作,特别适用于需要处理动态加载内容的网页爬虫场景。它支持多种主流浏览器,能够执行JavaScript并等待页面完全加载。
 
上一篇
Github Actions
下一篇
OCC任务相关