Python网络爬虫实战案例

环境准备

除了requests和BeautifulSoup,这次必须用上Selenium和PyExecJS。目标网站商品列表通过JS加载,简单请求拿不到完整数据。安装命令:

注意:Chrome驱动版本要匹配本地浏览器,放在Scripts目录下。

动态页面破解

先分析网络请求,发现商品价格和库存数据藏在XHR接口里,但参数经过JS加密。直接上Selenium模拟浏览器:

这样能拿到完整DOM,但效率太低。进一步抓包发现接口参数规律:主要加密字段是时间戳+商品ID的MD5哈希。用PyExecJS执行本地JS文件生成签名:

encrypt.js里存放网站的反混淆JS代码,这个需要手动调试提取。

数据解析技巧

价格信息藏在<script>标签的JSON里,用正则匹配比解析DOM更可靠:

注意有些网站会用Unicode乱序编码,需要先做字符归一化处理。

反爬虫应对

连续请求会被封IP,需要多管齐下:

用fake-useragent轮换请求头

搭建代理IP池,每次请求切换IP

关键操作添加随机延时:

遇到验证码时,调用打码平台接口自动识别,这里推荐自己训练CNN模型识别简单验证码。

数据存储优化

不要直接写MySQL,先存到Redis队列缓冲,再用异步任务批量入库。这样即使程序中断也不会丢失数据:

常见坑点

网站使用字体加密时,需要解析woff文件建立字符映射关系

部分数据通过WebSocket推送,要用websocket-client库监听

分布式爬虫注意设置Redis分布式锁,避免重复抓取

最后提醒:控制请求频率!曾在测试时触发网站风控,导致IP被封半小时。建议单线程延迟保持在2-3秒,重要数据采集放在业务低谷期进行。

完整代码已上传GitHub,包含数据去重和断点续爬功能。爬虫不仅是技术活,更是和网站运维的博弈,需要持续迭代才能稳定运行。

相关推荐
Sarvartha20 分钟前
Iterator 迭代器、ListIterator & foreach 循环
开发语言
樱花落木兰23 分钟前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程
外收内放30 分钟前
ENSP学习记录(6)
开发语言·学习·php
mumu15730 分钟前
快速上手大模型推理vllm
人工智能·python·大语言模型·agent·vllm
明天会有多晴朗31 分钟前
从零手写 Transformer!一个 Python 文件跑通英译中(PyTorch 附完整源码)
人工智能·pytorch·python·深度学习·transformer
dialect_35 分钟前
CODEFORCES ROUND 1127 DIV2
开发语言·c++·算法
盛世宏博北京40 分钟前
档案库房恒温恒湿消毒净化一体机与3D可视化平台联动调试笔记
开发语言·php·温湿度·档案室
小徐不徐说9 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
ragnwang10 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go10 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型