爬虫策略——反爬机制

现代网站通常会使用多种反爬手段来限制爬虫访问数据。了解这些机制并针对性地制定绕过策略,是构建高效爬虫的关键。


1. 常见反爬手段

1.1 User-Agent 检查

网站通常会通过检查请求中的 User-Agent 字段,判断访问是否来自真实用户。爬虫默认的请求库(如 requests)使用的 User-Agent 通常暴露为爬虫工具。

  • 特点
    • 爬虫请求的 User-Agent 通常类似:Python-urllib/3.8
    • 常见浏览器的 User-Agent 表示如下:
      Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

  • 应对策略
    • 随机化 User-Agent:通过每次请求更换不同的 User-Agent 来伪装爬虫。
    • 使用真实用户的浏览器标识。

示例代码:

import requests
import random# 模拟不同的 User-Agent
user_agents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
]url = "https://example.com"
headers = {"User-Agent": random.choice(user_agents)
}
response = requests.get(url, headers=headers)
print(response.status_code)

1.2 IP 封禁

网站检测到同一 IP 频繁访问或执行异常行为时,会暂时或永久封禁该 IP。

  • 特点

    • 限制单个 IP 的访问频率(如每分钟最多访问 100 次)。
    • 阻止黑名单 IP 的所有请求。
  • 应对策略

    • 使用代理池轮换 IP。
    • 减缓请求频率,添加随机延迟。

示例:使用 proxies 参数进行代理切换:

import requests
import randomproxies = [{"http": "http://123.123.123.123:8080", "https": "http://123.123.123.123:8080"},{"http": "http://124.124.124.124:8080", "https": "http://124.124.124.124:8080"}
]url = "https://example.com"
proxy = random.choice(proxies)
response = requests.get(url, proxies=proxy)
print(response.status_code)

1.3 验证码机制

验证码是最常见的反爬手段,用于验证用户的真实性,防止自动化请求。

  • 类型

    • 图形验证码:用户需识别图像中的字符。
    • 滑动验证码:需要拖动滑块完成验证。
    • reCAPTCHA:基于行为分析判断是否为人类。
  • 应对策略

    • 使用人工或第三方服务(如 2Captcha)识别验证码。
    • 模拟真实用户行为(如鼠标拖动、延迟操作)。

图形验证码破解示例:

from PIL import Image
import pytesseract# 加载验证码图像
image = Image.open("captcha.png")
# 使用 OCR 识别验证码内容
captcha_text = pytesseract.image_to_string(image)
print("Captcha:", captcha_text)

1.4 JavaScript 渲染检测

许多动态网站通过 JavaScript 加载内容,而直接请求可能无法获得完整的 HTML 数据。

  • 特点
    • 页面初始 HTML 返回空,需等待 JavaScript 渲染完成。
    • 使用 Headless 浏览器(如 Selenium)绕过。

2. 绕过反爬的策略和方法

2.1 使用代理池

通过代理池轮换 IP 是应对 IP 封禁的常用手段。

  • 代理池常用工具:
    • Open-source 工具scrapy-rotating-proxies
    • 第三方代理服务:如 BrightData、Oxylabs。

示例:构建动态代理池:

import requests
import randomdef get_proxies():# 示例:通过第三方代理 API 获取代理response = requests.get("https://proxy.example.com/get")return response.json()["proxies"]# 使用代理池
proxies = get_proxies()
url = "https://example.com"
proxy = random.choice(proxies)
response = requests.get(url, proxies={"http": proxy, "https": proxy})
print(response.status_code)

2.2 模拟用户行为

通过模拟用户的操作(如点击、滚动、延迟)绕过反爬机制。

  • 工具
    • Selenium。
    • Puppeteer。

Selenium 示例:

from selenium import webdriver
from selenium.webdriver.common.by import By# 设置无头浏览器
options = webdriver.ChromeOptions()
options.add_argument("--headless")# 启动浏览器
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")# 模拟点击操作
button = driver.find_element(By.ID, "submit")
button.click()# 延迟等待
time.sleep(5)
print(driver.page_source)

2.3 验证码识别

通过第三方 API 服务自动识别验证码内容。

  • 常用服务:
    • 2Captcha
    • Anti-Captcha
    • DeathByCaptcha

验证码识别示例:

import requestsapi_key = "YOUR_API_KEY"
captcha_image = "captcha_image_base64"response = requests.post("https://2captcha.com/in.php",data={"key": api_key, "method": "base64", "body": captcha_image}
)
captcha_id = response.text.split("|")[1]# 获取验证码结果
result = requests.get(f"https://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}")
print("Captcha Result:", result.text)

2.4 绕过 JavaScript 渲染
  • 工具
    • Selenium。
    • Playwright。
    • Puppeteer。

Playwright 示例:

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=True)page = browser.new_page()page.goto("https://example.com")# 等待页面加载page.wait_for_load_state("networkidle")print(page.content())

总结

反爬机制是爬虫开发者必须面对的挑战。通过灵活运用 User-Agent 伪装、代理池、验证码识别、以及动态页面渲染处理等技术,开发者可以有效绕过大多数反爬措施,实现稳定的数据抓取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20279.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DataWhale—PumpkinBook(TASK03对数几率回归)

一、课程组成及结构 课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿) Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解…

系统安全第十三次作业题目及答案

一、 1.计划 实施 检查 处置 2.物理 系统 运行 数据 人员 技术文档 3.物理 网络 系统 应用 管理 二、 1.C 2.B 3.A 4.ACDE 5.ABCD 三、 1. 答: 概念:信息系统安全管理指通过计划、组织、领导、控制等环节来协调人力、物力、财力等资源&#x…

Qml 模型-视图-代理(贰)之 代理(Delegate) 学习

使用模型与视图来定义用户界面时,代理在创建显示时扮演了大量的角色,在模型中的每个元素通过代理来实现可视化。 代理 使用键盘移动 高亮 效果 代码: 视图绑定的属性是 ListView.isCurrentItem: 这个属性是一个布尔值,标识这…

LeetCode 面试经典 150 题回顾

目录 一、数组 / 字符串 1.合并两个有序数组 (简单) 2.移除元素 (简单) 3.删除有序数组中的重复项 (简单) 4.删除有序数组中的重复项 II(中等) 5.多数元素(简单&am…

内外网交换过程中可能遇到的安全风险有哪些?

在数字化时代,企业内外网之间的数据交换变得日益频繁。然而,这一过程中的安全风险和效率问题也日益凸显。我们将探讨内外网交换可能遇到的安全风险,并介绍镭速内外网交换系统如何有效应对这些挑战。 内外网交换过程中的五大安全风险 数据泄露…

人工智能之机器学习概念3【培训机构学习笔记】

定义及作用: 无监督学习是通过试图学习或提取数据背后的数据特征,或者从数据中抽取出重要的特征信息,常见的算法有类聚、降维、文本处理(特征抽取)等。无监督学习一般是作为有监督学习的前期数据处理,功能…

文件系统的存储方式

磁盘是一个机械设备,外设。 磁盘的基本单位是扇区,一个扇区512字节,4KB。一片可以有n磁道,1磁道可以有m扇区。 如何找到指定位置的扇区?a.找到指定的磁头H b.找到指定的磁道(柱面)C c.找到指定的扇区S。这个叫CHS定址法…

微搭低代码私有化版本升级

目录 1 登录服务器2 进入weda的安装目录3 停止服务4 清除老版本镜像5 下载最新部署包6 重新激活license7 安装服务总结 我们上一篇讲解了部署私有化版本,随着公测的进行,版本是在不断的升级,目前已经到了0.3版本,我们有必要升级一…

JavaSec | JDBC反序列化原理和调用链细节分析

基础知识 JDBC简介 JDBC(Java Database Connectivity,Java 数据库连接)是 Java 语言中用来规范客户端如何访问数据库的应用程序接口,提供了诸如查询和更新数据在内的方法。JDBC 提供了一种基准,据此可以构建更高级的…

【氮化镓】用于低压射频电源的具有80.4% PAE的Si基E-Mode AlN/GaN HEMT

引言 本文是一篇关于增强型(E-mode)AlN/GaN高电子迁移率晶体管(HEMTs)的研究论文,晶体管是在硅衬底上制造的,并在3.6 GHz频率下展示了80.4%的峰值功率附加效率(PAE)。文章首先介绍了GaN器件在微波和毫米波功率放大器中的应用,特别是在雷达、卫星通信和民用移动通信系…

刚刚!EI目录更新,213本期刊停止收录

刚刚,EI Compendex数据库发布了最新版收录期刊目录。 目录实际更新时间为2024年11月1日 2024年截止11月份EI数据库已更新3次,更新时间分别为2024年1月、2024年8月和2024年11月。 本次目录共收录期刊5643本,其中包含Journal类型4359本、Pr…

L0G2000 Python 基础知识

力扣用python3解题383. 赎金信 https://leetcode.cn/problems/ransom-note/description/ 题目: 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否…

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…

同步互斥相关习题2 8道 含详解

14 一组进程的执行顺序如下图所示,圆圈P1,P2,P3,P4,P5,P6表示进程,弧上的字母a,b,c, d,e,f,g,h表示同步信号量,请用P,V操作实现进程的同步。 semaphore a …

CDH大数据平台搭建

各大开源以及商用厂商的大数据产品汇总: https://zhuanlan.zhihu.com/p/675011462 Ambari 界面: 一、安装一个新的虚拟机 配置要求:8核,10G内存,最好是200G 修改yum源: 修改阿里云的镜像文件&#xff1…

500左右的骨传导耳机哪个牌子好?用户体验良好的五大骨传导耳机

作为一名拥有十几年从业经验的科技爱好者,我主要想告诉大家一些关于骨传导耳机的知识。其中,要远离所谓的不专业产品,它们的佩戴不适和音质不佳问题高得吓人,尤其是很多宣称能提供舒适佩戴和高音质的产品,超过九成的用…

【YOLOv11改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv11中引入DA、FCA、SA、SC、SE魔改v11,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segm

捉虫笔记(六)-谁把系统卡住了?

06-谁把系统卡住了? 1、现象 QA反馈,在软件退出的时候,会把整个系统卡住,将近40s。我第一反应这么离谱,我们的软件有这么大的“魅力”,将老大哥抖三抖。 我立马重现现场,果然如此。虽然没有Q…

网络安全之信息收集-实战-2

请注意,本文仅供合法和授权的渗透测试使用,任何未经授权的活动都是违法的。 目录 7、网络空间引擎搜索 8、github源码泄露 9、端口信息 10、框架指纹识别 11、WAF识别 12、后台查找 7、网络空间引擎搜索 FOFA:https://fofa.info/ 360 …

51c自动驾驶~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/12086789 #跨越微小陷阱,行动更加稳健 目前四足机器人的全球市场上,市场份额最大的是哪个国家的企业?A.美国 B.中国 C.其他 波士顿动力四足机器人 云深处 绝影X30 四足机器人 &#x1f…