当前位置: 首页 > news >正文

Python爬虫框架设计:类封装与工程化实践​

实战中的UA轮换技巧

import fake_useragent
import random

class DynamicHeader:
def init(self):
self.ua_generator = fake_useragent.UserAgent() # 注意:实际使用需更新数据路径
self.fingerprints = [“chrome125”, “edge115”, “safari17”] # 2025年主流指纹

def get_headers(self):return {'User-Agent': self.ua_generator.random,'X-Browser-Fingerprint': random.choice(self.fingerprints),  # 新增指纹伪装'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Cache-Control': 'no-cache'  # 禁用缓存更接近真人}

​​人肉痕迹添加​​


保留调试注释:# 注:fake_useragent需定期更新数据路径,否则可能失效


真实问题记录:# 2024.12实测:Edge115指纹在腾讯系网站触发验证码,建议慎用

​​行为模拟增强方案​​

from selenium.webdriver import ChromeOptions
from time import sleep
import random

def human_like_actions(driver):
“”“模拟人类浏览轨迹”“”
# 随机页面滚动(非匀速)
scroll_points = [random.randint(200, 800) for _ in range(3)]
for point in scroll_points:
driver.execute_script(f"window.scrollTo(0, {point})")
sleep(random.uniform(0.8, 2.5)) # 波动停留时间

# 随机点击非目标元素(防行为检测)
all_links = driver.find_elements('tag name', 'a')
if all_links and random.random() > 0.7:  # 70%概率执行random.choice(all_links).click()sleep(random.uniform(1.5, 3))

​​避坑指南​​

2025年某电商项目实测:纯随机滚动仍被检测,需加入​​加速度变量​​(初始慢→快→慢)

解决代码:driver.execute_script(“window.scrollBy(0, {distance}, {behavior: ‘smooth’})”)

​​二、代码层防检测技巧​​
1.
​​工程化伪装技巧​​

class StealthRequest:
def init(self, base_url):
self.session = requests.Session()
self.session.headers = DynamicHeader().get_headers()
self.session.verify = False # 关闭SSL验证(实测可绕过部分企业防火墙)

    # 连接池参数优化(2025.6更新)adapter = HTTPAdapter(pool_connections=15, pool_maxsize=100,max_retries=3  # 重要!失败自动切换IP)self.session.mount('https://', adapter)def get(self, url, **kwargs):# 随机延迟+网络抖动模拟jitter = random.gauss(1.8, 0.7)  # 高斯分布更接近真人sleep(max(0.5, jitter))  # TODO: 此处应添加代理切换逻辑(项目保密要求删除)return self.session.get(url, **kwargs)

​​开发者日志嵌入​​

曾用方案:直接随机sleep(0.5-3)

2025.3问题:固定区间被某安全系统标记为"机器人节拍器"

现方案改进:高斯分布+动态基数调整 4

​​三、反检测实战案例​​
​​豆瓣爬虫对抗史​​

时间

反爬升级

破解方案

有效性

2024.07

强制Cookie: ll字段

地理伪装ll=“118281”

3个月

2024.11

动态加载评分数据

Selenium+隐身模式

至今

2025.02

前端加密参数_sign

逆向JS提取加密函数

2周后失效

2025.06

行为建模检测

鼠标轨迹注入+操作间隔泊松分布

当前

2025年有效代码片段(精简版)

driver.execute_script(
“window.navigator.webdriver = undefined” # 消除自动化标记
)
action = ActionChains(driver)
action.move_by_offset(
random.randint(10, 50),
random.randint(5, 30)
).pause(random.expovariate(0.8)).perform() # 指数分布间隔
​​四、人肉痕迹注入规范​​
1.
​​注释规范​​


保留调试代码:# print(f"DEBUG: 状态码={resp.status}") # 临时排查403用


添加TODO标记:# TODO: 需处理Cloudflare五秒盾(待研究)


版本差异提示:# 注:Selenium 4.8+必须配置driver.execute_cdp_cmd

​​文档策略​​

class ArticleSpider(BaseSpider):
“”"
文章采集器V2.3 (2025-08-20更新)
更新日志:
- 修复xx网参数加密漏洞
- 新增头条系反检测方案 by 张工
- 已知问题:腾讯新闻滑动验证突破率仅67%
“”"
​​五、防检测红线提醒​​
1.
​​绝对禁止行为​​


❌ 固定时间间隔请求(即使随机化也易被建模检测)


❌ 忽略robots.txt中的Crawl-delay声明


❌ 单IP日均请求超5000次(触发企业级WAF自动封锁)

​​合规替代方案​​

遵守robots.txt的爬虫示例

from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url(“https://www.example.com/robots.txt”)
rp.read()
if rp.can_fetch(““, target_url):
# 遵守声明延迟
delay = rp.crawl_delay(”
”) or random.uniform(2, 8)
time.sleep(delay)

http://www.dtcms.com/a/349408.html

相关文章:

  • Linux驱动开发笔记(七)——并发与竞争(下)——自旋锁信号量互斥体
  • 计算机网络课堂笔记
  • frp基础知识
  • React 学习笔记2 props、refs
  • 消息中间件RabbitMQ03:结合WebAPI实现点对点(P2P)推送和发布-订阅推送的Demo
  • 从C语言到数据结构:保姆级顺序表解析
  • 使用OpenSSL生成自签名证书
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化
  • 逆向抄数工程师能力矩阵:设备操作(±0.05mm 精度)× 曲面重构 ×GDT 公差分析
  • C++|UDP通讯使用总结
  • Fluent Bit系列:字符集转码测试(下)
  • Dify 从入门到精通(第 55/100 篇):Dify 的模型微调(进阶篇)
  • Devops之Jenkins:Jenkins服务器中的slave节点是什么?我们为什么要使用slave节点?如何添加一个windows slave节点?
  • 如何监控ElasticSearch的集群状态?
  • Fluent Bit系列:字符集转码测试(上)
  • LengthFieldBasedFrameDecoder 详细用法
  • Error ratio tests for 200 Gb/s per lane ISLs using PMAmeasurements
  • 李沐-第十章-实现Seq2SeqAttentionDecoder时报错
  • 什么是事件循环(Event Loop)?浏览器和 Node.js 中的事件循环有什么区别?
  • springboot整合druid(多数据源配置)
  • Python_occ 学习记录 | 阵列
  • 李沐-第十章-训练Seq2SeqAttentionDecoder报错
  • 十九、云原生分布式存储 CubeFS
  • 剧本杀APP系统开发:打造多元化娱乐生态的先锋力量
  • Go编写的轻量文件监控器. 可以监控终端上指定文件夹内的变化, 阻止删除,修改,新增操作. 可以用于AWD比赛或者终端应急响应
  • TensorFlow深度学习实战(34)——TensorFlow Probability
  • GO学习记录八——多文件封装功能+redis使用
  • Node.js(2)—— Buffer
  • 安卓Android低功耗蓝牙BLE连接异常报错133
  • Docker Compose 部署 Elasticsearch 8.12.2 集成 IK 中文分词器完整指南