python爬虫工程师 | 都会遇到的反爬手段,详细展示低难度反爬

news2024/5/18 9:34:30

在爬虫实战过程中,常见的反爬手段如下所示。

  • IP 地址限制:网站可以检测爬虫的 IP 地址,并限制爬虫访问。
  • User-Agent 限制:网站可以通过检测请求头中的 User-Agent 来识别爬虫。
  • Referrer 限制:网站可以通过检测请求头中的 Referrer 字段来识别爬虫。
  • Cookies 限制:网站可以通过在响应中发送 Cookies 来识别爬虫。
  • 频率限制:网站可以限制爬虫访问频率,以防止爬虫对网站造成过多压力。
  • JavaScript 混淆:网站可以使用 JavaScript 混淆技术来防止爬虫识别页面内容。
  • HTTPS 加密:网站可以使用 HTTPS 加密协议来防止爬虫抓取数据。

文章目录

    • IP地址限制
    • User-Agent 限制
    • Referrer 限制
    • Cookies 限制
    • 频率限制反爬
    • JavaScript 混淆
    • HTTPS 加密反爬

IP地址限制

IP 地址限制是指网站可以通过检测请求的 IP 地址,并限制特定 IP 地址访问网站。

这是一种常用的反爬手段,主要用于防止爬虫对网站造成过多压力。

下面是一个 Python 代码示例,使用了 requests 库进行请求,并在请求头中指定了代理 IP 地址:

import requests

url = "https://pachong.vip"
# 设置代理 IP 地址
proxies = {
  "http": "http://代理IP:端口",
  "https": "http://代理IP:端口",
}
# 注意 proxies 参数
response = requests.get(url, proxies=proxies)

print(response.text)

如果网站限制了特定 IP 地址的访问,使用代理 IP 地址就可以绕过限制,并成功抓取数据。

User-Agent 限制

User-Agent 限制是指网站可以通过检测请求头中的 User-Agent 字段,识别请求来源是否是爬虫。

如果识别为爬虫,网站将限制或拒绝该请求。

python爬虫工程师 | 都会遇到的反爬手段,详细展示低难度反爬

下面是 User-Agent 字段的格式:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

👉 为了绕过 User-Agent 限制,可以在请求头中指定一个常见的浏览器 User-Agent,以模拟浏览器访问,以下是代码示例:

import requests

url = "https://pachong.vip"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

response = requests.get(url, headers=headers)

print(response.text)

Referrer 限制

Referrer 限制是指网站可以通过检测请求头中的 Referrer 字段,识别请求的来源。

如果识别为爬虫,网站将限制或拒绝该请求。

下面是 Referrer 字段的格式:

Referer: https://www.example.com

为了绕过 Referrer 限制,可以在请求头中不指定 Referrer,或者指定一个普遍的 Referrer,以下是使用 Python 的 Requests 库的代码示例:

import requests

url = "https://pachong.vip"

headers = {
    'Referer': 'https://pachong.vip'
}

response = requests.get(url, headers=headers)
print(response.text)

Cookies 限制

Cookies 限制反爬是指在服务器端使用 Cookies 技术限制爬虫访问数据的手段。

Cookies 是一种存储在客户端的数据结构,用于识别客户端与服务器端的会话。

服务器端可以使用 Cookies 存储登录信息,并在每次请求时发送给客户端,以识别客户端的身份。

如果服务器端使用 Cookies 限制爬虫访问数据,只有携带正确 Cookies 的请求才能够获得正确数据。

下面是使用 Python 爬取网站数据,并携带 Cookies 的代码示例:

import requests

# 设置 Cookies
cookies = {
    "Cookie1": "xiangpica",
    "Cookie2": "beautiful",
}

# 发送请求,并携带 Cookies
response = requests.get("https://pachong.vip", cookies=cookies)

# 打印响应数据
print(response.text)

在这里插入图片描述

频率限制反爬

频率限制反爬是指在服务器端限制客户端的请求频率的反爬手段。

服务器端可以限制一个 IP 地址每秒只能发送 10 次请求,如果超过这个频率,则直接拒绝请求。

Tips:频率限制反爬可以防止爬虫短时间内大量请求数据,防止服务器被爬虫程序消耗资源,影响服务器正常功能。

import time
import requests

# 请求频率,每秒请求次数
frequency = 10

# 记录请求开始时间
start_time = time.time()

# 记录请求次数
request_count = 0

while True:
    # 如果请求次数小于请求频率
    if request_count < frequency:
        # 发送请求
        response = requests.get("https://pachong.vip")

        # 打印响应数据
        print(response.text)

        # 增加请求次数
        request_count += 1

    # 如果请求次数等于请求频率
    if request_count == frequency:
        # 计算已经用时
        elapsed_time = time.time() - start_time

        # 如果已经用时小于 1 秒
        if elapsed_time < 1:
            # 等待剩余时间
            time.sleep(1 - elapsed_time)

        # 重置请求开始时间
        start_time = time.time()

        # 重置请求次数
        request_count = 0

学习时先声明请求频率变量: frequency ,并在循环中使用该值来控制请求次数。

每次请求时,我们检查请求次数是否小于请求频率。

如果是,我们就发送请求,并增加请求次数。

如果请求次数等于请求频率,我们就计算已经用时的时间,并等待剩余时间以使得请求频率不超过限制。

JavaScript 混淆

JavaScript 混淆反爬是一种防止爬虫自动获取网站内容的常见手段。在这种情况下,网站的某些关键数据可能已经被混淆,使其难以被自动抓取。

在 Python 中,我们可以使用 BeautifulSoup 和 Selenium 等库来处理 JavaScript 混淆反爬。

from selenium import webdriver

# 配置驱动器
driver = webdriver.Chrome()

# 访问混淆页面
driver.get("https://www.pachong.vip/blog")

# 获取混淆数据
data = driver.find_elements_by_name("list-group")[0].text

# 关闭浏览器
driver.quit()

HTTPS 加密反爬

HTTPS 加密是一种防止网络数据被窃取的常用技术,也是反爬技术的一部分。在 HTTPS 加密的情况下,爬虫程序无法直接访问网站数据,需要使用特定的方法来处理。

在 Python 中,我们可以使用 requests 库来处理 HTTPS 加密反爬:

import requests

# 访问 HTTPS 页面
response = requests.get("https://www.pachong.vip")

# 获取页面内容
content = response.text

# 打印页面内容
print(content)

如果网站使用的是自定义证书,您可以在请求时传递自定义证书。这样可以避免 SSL 证书错误,并且在请求时只验证指定的证书。

以下是使用自定义证书的代码示例:

import requests

# 访问 HTTPS 页面,使用自定义证书
response = requests.get("https://www.pachong.vip/secure-page", verify="./cert.pem")

# 获取页面内容
content = response.text

# 打印页面内容
print(content)

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 874 篇原创博客

👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

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

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

相关文章

TCO-PNB ester,1438415-89-4 ,反式环辛烯对硝基苯酯,可用于标记蛋白质

TCO-PNB ester&#xff0c;TCO-PNB&#xff0c;反式环辛烯-对硝基苯酯 &#xff0c;反式环辛烯对硝基苯酯&#xff0c;TCO-PNB酯产品结构式&#xff1a;产品规格&#xff1a;1.CAS号&#xff1a;1438415-89-4 2.分子式&#xff1a;C15H17NO53.分子量&#xff1a;291.34.包装规格…

[python入门㊶] - python写入文件

目录 ❤ 写入空文件&#xff08;覆盖&#xff09; ❤ 写入多行 ❤ 在原有文件上添加内容 保存数据的最简单的方式之一是将其写入到文件中❤ 写入空文件&#xff08;覆盖&#xff09; # codingUTF-8 filename test_text.txt with open(filename, w) as file_object:file_o…

怎么做室内导航?室内导航图用什么做的?

目前大多数的图资系统提供的室内地图多为静态信息&#xff0c;并没有随时间空间改变而更新的能力&#xff0c;在现有技术中缺乏一种展示室内真实场景的室内地图生成方法。由于室内的环境空间信息会因为时空迁变而有所不同&#xff0c;因此&#xff0c;如何以更快速且低成本的方…

Python深度学习实战PyQt5布局管理项目示例详解

本文具体介绍基本的水平布局、垂直布局、栅格布局、表格布局和进阶的嵌套布局和容器布局&#xff0c;最后通过案例带小白创建一个有型的图形布局窗口布局管理就是管理图形窗口中各个部件的位置和排列。图形窗口中的大量部件也需要通过布局管理&#xff0c;对部件进行整理分组、…

Qt 5 架构和特点

Qt 5 模块构架&#xff1a; 模块&#xff1a;功能&#xff1a;Qt CoreQt 5 的核心类库&#xff0c;每个模块都建立在Core上Qt GUI图形用户界面开发的最基础的类库Qt Widgets提供c用户界面部件&#xff08;是对Qt GUI的拓展&#xff09;Qt SQL对数据库进行操作Qt Multimedia、…

windows 上编译 cpu 版本的 ncnn

windows 上编译 cpu 版本的 ncnn 从 发布页面 下载最新的完整的 ncnn 代码包&#xff0c;即 -full-source 后缀的文件。以及 protobuf 的代码包&#xff08;用于生成 caffe2ncnn 和 onnx2ncnn 工具&#xff09;。 我下载的 20221128 版本的 ncnn 和 3.11.2 版本的 protobuf。…

C语言经典编程题100例(1-20)

1、练习2-1 Programming in C is fun!本题要求编写程序&#xff0c;输出一个短句“Programming in C is fun!”。输入格式:本题目没有输入。输出格式:在一行中输出短句“Programming in C is fun!”。代码&#xff1a;#include<stdio.h> int main() {printf("Progra…

https之数字证书分析

写在前面 当我们要给网站配置https时&#xff0c;都需要申请 一个数字证书&#xff0c;然后将数字证书配置在网站上&#xff0c;如下可能配置: <Connector port"446" protocol"org.apache.coyote.http11.Http11Protocol" SSLEnabled"true"s…

TCP的三次握手 四次挥手 和相关问题

TCP 三次握手 四次挥手 tcp在传输层 tcp&#xff1a; tcp报文&#xff1a; 三次握手&#xff1a; tcp 其中也涉及到了状态的切换 利用了这种状态保证了建立连接和断开连接的逻辑 两次握手不可&#xff1f; 第一个解释: 这个问题的本质是, 信道不可靠, 但是通信双发需要就某个…

var const let

菜鸟学前端 本文&#xff1a;https://www.jianshu.com/p/b7116525273b 文章目录varlet和const写不动了参考说实话&#xff0c;在看到这个之前&#xff0c;我只知道 var&#xff0c;以前也只用过这玩意。 后面那俩都不知道是干啥用的。 感谢同桌的提示。 记&#xff01; var v…

LR2023磨皮滤镜插件Portraiture4最新版

Portraiture4是一款智能磨皮的滤镜插件&#xff0c;该插件能够给Photoshop和Lightroom添加智能磨皮美化功能&#xff0c;可以帮助用户快速对图片中的人物的皮肤、头发、眉毛等部位进行美化&#xff0c;省去了手动调整的麻烦&#xff0c;大大提高P图的效率。Portraiture这是一款…

【线下沙龙】如何用项目管理的思维经营自己的生活

为什么自己参加那么多的学习&#xff0c;也没有过好自己的人生&#xff1f;这个问题出在哪里&#xff1f; 你勾画过自己未来的生活吗&#xff1f; 你没有渴望过的东西会出现在你的生活里吗&#xff1f; 如何实现自己想要的生活&#xff1f; 有一个全球性的调查问卷&#xff1a;…

IDEA运行IAM3.0的管理后台项目(WAR包运行)

1、查看打包方式 远程仓库拉取最新代码 首先查看项目打包方式&#xff0c;为war说明是在容器中运行的。 2、修改数据库配置 将数据库配置修改为本机配置&#xff0c;一般有一个properties配置文件&#xff0c;避免启动之后发现数据库不对又得重启。 3、 系统环境配置 Ct…

【前端笔试题一】:解析url路径中的query参数

前言 本文记录下在笔试过程中的前端笔试编程题目&#xff0c;会持续更新 1. 题目&#xff1a; 解析 url 路径中的 query 参数&#xff0c;比如&#xff1a;‘http://building/#/skeleton?serialNumber2023020818332821073&jobNo210347&target%7B%22a%22%3A%22b%22%2C…

Spring6—JdbcTemplate基础

JdbcTemplate是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码。 可以让Spring集成其他的ORM框架:Mybatis、Hibernate等 环境&#xff1a;JDK17IDEAMavenSpring6JdbcTemplate 环境准备 准备数据库表 新建模板 New Module Maven项…

Spring中更简单的存储和读取Bean

目录 一、存储Bean 1.1 配置扫描路径 1.2 使用注解存储Bean对象 1.2.1 五大类注解 1.2.2 方法注解Bean 二、获取Bean 2.1 属性注入 2.2 setter注入 2.3 构造方法注入 2.4 Resource注解 2.5 同一类型多个Bean报错 一、存储Bean 在xml时代&#xff0c;存储一个Bean对象…

力扣SQL刷题7

1132. 报告的记录 II 题型&#xff1a;表1&#xff0c;对列A分组&#xff0c;在列B满足某种条件下&#xff0c;&#xff08;出现在表2中的列C值个数&#xff09;/(列C个数)的比例&#xff0c; 对A分组各类别中取均值 解答1&#xff1a; select 列A&#xff0c;count(distinct …

Kotlin 面向对象(一)

【文字内容源于《疯狂Kotlin讲义》&#xff0c;代码内容原创】 目录 一、类和对象 1.定义类 2.对象的产生和使用 3.对象的this引用 二、方法详解 1.方法与函数的关系 2.中缀表示法 3.componentN方法与解构 4、数据类和返回多个值的函数 5、在Lambda表达式中结构 三…

PHP反序列化漏洞之pop链2

目录 题目&#xff1a; 题目代码&#xff1a; 分析&#xff1a;代码审计 通过以上分析&#xff0c;最终我们构建这个payload&#xff1a; 结果&#xff1a; 目标达到&#xff01; 题目&#xff1a; 这个题目分析就有难度了&#xff0c;需要掌握php的魔法方法的使用以及调用…

算法刷题打卡第85天:设计一个验证系统

设计一个验证系统 难度&#xff1a;中等 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可…