【爬虫理论实战】详解常见头部反爬技巧与验证方式 | 有 Python 代码实现

news2024/11/15 4:52:19

以下是常见头部反爬技巧与验证方式的大纲:
User-Agent 字段的伪装方式,Referer 字段的伪装方式,Cookie 字段的伪装方式。

文章目录

    • 1. ⛳️ 头部反爬技巧
      • 1.1. User-Agent 字段&User-Agent 的作用
      • 1.2. 常见 `User-Agent` 的特征
      • 1.3. User-Agent 字段的伪装方式
    • 2. ⛳️ Referer 字段
      • 2.1. Referer 的作用
      • 2.2. Referer 的特征
      • 2.3. Referer 字段的伪装方式
    • 3. ⛳️ Cookie 字段
      • 3.1. Cookie 的作用
      • 3.2. Cookie 的特征
      • 3.3. Cookie 字段的伪装方式

1. ⛳️ 头部反爬技巧

1.1. User-Agent 字段&User-Agent 的作用

User-Agent 字段是 HTTP 协议中的一个请求头部,通常用于标识客户端发送请求的应用程序、操作系统、设备类型、版本等信息。服务器可以根据 User-Agent 字段来判断请求是否来自合法的客户端,做出相应的响应,比如返回不同的网页内容、进行流量控制等。

下面是一些 User-Agent 字段的例子,重点对比其差异。

  • Chrome 浏览器的 User-Agent 字段:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
  • Firefox 浏览器的 User-Agent 字段:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
  • Safari 浏览器的 User-Agent 字段:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15
  • 微信小程序的 User-Agent 字段:Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Mobile/16A366 MicroMessenger/7.0.10(0x17000a22) NetType/WIFI Language/zh_CN
  • Python 爬虫的 User-Agent 字段:Python-urllib/3.8

写python爬虫,你永远绕不过去代理问题

1.2. 常见 User-Agent 的特征

常见 User-Agent 的特征包括以下几点:

  1. 操作系统信息:User-Agent 字段通常会包含操作系统的信息,比如 Windows、MacOS、Linux 等,不同的操作系统使用的浏览器可能不同,因此对于一些网站来说,操作系统的信息也可以作为反爬手段之一。

  2. 浏览器信息:User-Agent 字段还会包含浏览器的信息,比如 Chrome、Firefox、Safari 等。不同的浏览器在渲染网页时可能会有一些差别,因此一些网站会根据浏览器信息来判断是否是爬虫。

  3. 设备信息:User-Agent 字段有时也会包含设备信息,比如 iPhone、iPad 等。不同设备使用的浏览器也可能不同,因此设备信息也可以作为反爬手段之一。

  4. 自定义 User-Agent:有些爬虫工具允许用户自定义 User-Agent 字段,因此一些网站也会根据这些自定义 User-Agent 来判断是否是爬虫。

1.3. User-Agent 字段的伪装方式

在 Python 中伪装 User-Agent 字段,可以使用第三方库 fake-useragent,它可以随机生成不同浏览器的 User-Agent

使用 pip 命令安装 fake-useragent 库:

pip install fake-useragent

使用以下代码生成随机的 User-Agent

from fake_useragent import UserAgent

ua = UserAgent()
print(ua.random)

在这里插入图片描述
这样就能每次生成一个不同的随机 User-Agent 了。另外,fake-useragent 还支持指定不同浏览器的 User-Agent,例如:

from fake_useragent import UserAgent

ua = UserAgent()
print(ua.chrome)  # 生成Chrome浏览器的User-Agent
print(ua.safari)  # 生成Safari浏览器的User-Agent
print(ua.ie)  # 生成IE浏览器的User-Agent

2. ⛳️ Referer 字段

2.1. Referer 的作用

Referer 是 HTTP 请求头中的一个字段,用来表示当前请求是从哪个页面跳转过来的。
通常在请求图片、视频、音频等静态资源时,浏览器会自动添加 Referer 字段,用来告诉服务器当前资源是从哪个页面发起请求的,服务器就可以根据这个信息做一些统计、记录或者安全控制等操作。

Referer 字段的作用主要有以下几点:

  • 防盗链:有些网站可能会设置一些图片或者视频等静态资源,只有在自己的网站上才能正常显示,如果从其他网站上直接访问,就会被拒绝访问。此时可以通过 Referer 字段来判断是否是从自己网站上来的请求,如果不是就拒绝访问。
  • 流量统计:通过 Referer 字段可以统计来访者是从哪个页面过来的,从而了解不同页面的流量情况,对网站进行优化。
  • 安全控制:有些网站可能会针对特定的 Referer 来源做一些安全控制,如防止 CSRF 攻击等。

2.2. Referer 的特征

Referer 是 HTTP 请求头的一部分,它记录了当前请求的来源页面,即发送请求的页面 URL。具体来说,当用户从一个页面 A 点击链接跳转到另一个页面 B 时,页面 B 的请求头中的 Referer 字段会记录页面 A 的 URL。

Referer 的特征主要包括:

  1. Referer 字段中记录的 URL 是前一次请求的 URL。因此,如果请求头中没有 Referer 字段,或者 Referer 字段中的 URL 与当前请求的 URL 不符,则可能被认为是异常请求,从而被服务器屏蔽或拒绝。

  2. Referer 字段可以用于防盗链,即通过判断 Referer 字段来判断是否是从合法的网站访问资源。比如,某个网站的图片资源只允许从该网站访问,而不允许其他网站直接链接该资源。这时,服务器可以通过判断 Referer 字段来防止其他网站直接链接该资源。

  3. Referer 字段可能会泄漏用户的隐私信息,因为它可以记录用户的浏览历史。为了保护用户的隐私,一些浏览器可能会限制 Referer 字段的发送,或者发送空的 Referer 字段。

2.3. Referer 字段的伪装方式

要伪装 Referer 字段,可以通过构造请求头部实现。下面是用 Python 实现的示例代码:

import requests

url = 'https://pachong.vip'
referer = 'https://www.referer.com'

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

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

在请求头中添加 Referer 字段,值为想要伪装成的来源页面的 URL。以上代码中,将 Referer 设置为 https://www.referer.com。

如果设置的 Referer 不符合实际情况,有可能会被网站识别为爬虫,导致请求被拒绝。因此,在进行爬虫时,应该根据具体情况,合理设置 Referer 字段。

3. ⛳️ Cookie 字段

3.1. Cookie 的作用

Cookie 是 Web 服务器发送给 Web 浏览器的小型文本文件,用于存储用户在浏览器中的状态信息。它可以使网站记住用户的登录状态、购物车内容、浏览历史等。

当用户访问一个网站时,Web 服务器会在 HTTP 响应头中添加 Set-Cookie 头信息,浏览器接收到响应后,会将 Cookie 保存在本地。当用户再次访问该网站时,浏览器会将保存的 Cookie 信息发送给 Web 服务器,服务器根据 Cookie 中的信息来进行相应的处理,比如保持用户登录状态等。

Cookie 的作用可以简单总结为三点:

  1. 记录用户的状态信息,如登录状态、购物车内容、浏览历史等;
  2. 使用户在访问同一个网站时能够保持同一个状态,比如不需要重复登录;
  3. 用于跟踪用户行为,帮助网站分析用户兴趣、推荐相关内容。

3.2. Cookie 的特征

  1. 存储在客户端:Cookie 是存储在客户端浏览器中的文本文件,可以通过浏览器进行查看和修改。

  2. 用于状态管理:Cookie 主要用于状态管理,例如网站登录状态的保存,购物车中的商品信息的保存等。

  3. 可以设置过期时间:可以在创建 Cookie 时设置过期时间,使得浏览器可以在过期时间之前将其删除。

  4. 每个域名单独存储:每个域名在客户端上都有一个单独的 Cookie 存储空间,不同域名之间的 Cookie 互不干扰。

  5. 大小限制:Cookie 存储的数据量有大小限制,通常为 4KB 左右。

  6. 不安全性:Cookie 存储的数据都是明文的,可能会被恶意篡改或者窃取。因此,敏感信息不应该存储在 Cookie 中。

  7. 可以禁用:浏览器允许用户手动禁用 Cookie,因此不能完全依赖 Cookie 进行状态管理。

3.3. Cookie 字段的伪装方式

  1. 手动设置 Cookie:可以在请求头中手动设置 Cookie 字段,模拟浏览器发送的请求。具体实现方式为,在构建 HTTP 请求时,添加请求头中的 Cookie 字段并填入具体的 Cookie 值。
import requests

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.36',
    'Cookie': 'name=value'
}

response = requests.get(url, headers=headers)
  1. 使用第三方库:可以使用第三方库进行 Cookie 伪装。例如,使用 fake_useragent 库伪装 User-Agent 和 http.cookiejar 库伪装 Cookie。
import requests
from fake_useragent import UserAgent
import http.cookiejar as cookielib

# 构建cookiejar对象
cookie_jar = cookielib.CookieJar()

# 构建opener
opener = requests.build_opener(requests.HTTPCookieProcessor(cookie_jar))

# 构建headers
headers = {'User-Agent': UserAgent().random}

# 发送请求
response = opener.open(url, headers=headers)
  1. 使用 Selenium 模拟浏览器:使用 Selenium 可以直接在浏览器中登录网站获取 Cookie,然后使用获取到的 Cookie 来发送请求。
from selenium import webdriver

# 构建浏览器对象
browser = webdriver.Chrome()

# 打开网站并登录
browser.get(url)
# ...

# 获取Cookie
cookies = browser.get_cookies()

# 构建cookie字符串
cookie_str = ''
for cookie in cookies:
    cookie_str += cookie['name'] + '=' + cookie['value'] + ';'

# 构建请求头
headers = {'Cookie': cookie_str}

# 发送请求
response = requests.get(url, headers=headers)

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

从订购之日起,案例 5 年内保证更新

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

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

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

相关文章

Spring IoC容器之常见常用注解以及注解编程模型简介

一、全文概览 本篇文章主要学习记录Spring中的核心注解,罗列常见常用的注解以及Spring中的注解编程模型介绍 二、核心注解 1、Spring模式注解 常用注解场景描述Spring起始支持版本Component通用组件模式注解,是所有组件类型注解的元注解Spring 2.5Repo…

【分库分表】企业级分库分表实战方案与详解(MySQL专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

计算机操作系统概述

文章目录1.0 操作系统概述1.1 操作系统的目标1.2 操作系统的功能1.3 操作系统结构1.4 操作系统接口1.5 操作系统的发展1.6 操作系统的特征2.0 进程管理2.1 进程调度2.2 进程调度算法2.3 进程间通信2.4 进程间的同步2.5 软件实现互斥的方法2.6 硬件实现互斥的方法2.7 信号2.8 管…

python基于django 医院急诊挂号系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 JAVA简介 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 SPRINGBOOT框架 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.…

Mysql(二)索引、查询

索引一、索引索引分类MySQL索引结构**B和B-树的区别**语法创建修改删除查看二、MySQL查询一、索引 概念: 索引时帮助MySQL高效获取数据的数据结构 本质: 数据结构 实现: 在存储引擎层面实现的,而不是server层面。不是所有的存储引…

CNI 网络分析(九)Calico IPIP

文章目录环境流量分析Pod 间Node 到 PodPod 到 serviceNode 到 serviceNetworkPolicy理清和观测网络流量环境 可以看到,在宿主机上有到每个 pod IP 的路由指向 veth 设备 到对端节点网段的路由 指向 tunl0 下一跳 ens10 的 ip 有到本节点网段 第一个 ip 即 tunl0 的…

Prometheus监控案例之blackbox-exporter

blackbox-exporter简介 blackbox-exporter项目地址:https://github.com/prometheus/blackbox_exporter blackbox-exporter是Prometheus官方提供的一个黑盒监控解决方案,可以通过HTTP、HTTPS、DNS、ICMP、TCP和gRPC方式对目标实例进行检测。可用于以下使…

基于计算机视觉的建筑物火灾早期探测模型的开发

1.文章信息本次介绍的文章是2023年韩国延世大学作为一作发表的一篇关于基于计算机视觉的火灾检测文章,题目为《Development of early fire detection model for buildings using computer vision-based CCTV》。2.摘要建筑物的火灾直接影响到居住者的生命。因此&…

FL Studio最新发布21版本更新全部内容详情介绍

FL Studio最新发布21版本,也是一次重要的版本更新,让使用FL Studio软件的音乐制作人们进入到了全新的AI编曲时代,并改进了80多操作页面包括用户页面、项目文件夹、常规设置、导出导入等等,使用起来更加的简洁。本期给大家带来的是…

相关性-回忆录(持续更新)

1.TODO方向 (1)数据增强:finetuning阶段需要大量人工标注样本,消耗时间和成本。用户点击数据作为弱监督学习,可以尝试图网络构建节点和边(query聚合); 使用展现未点击生成对抗网络进…

加油站会员管理小程序实战开发教程14 会员充值

我们上篇介绍了会员开卡的业务,开卡是为了创建会员卡的信息。有了会员卡信息后我们就可以给会员进行充值。当然了充值这个业务是由会员自主发起的。 按照我们的产品原型,我们在我的页面以轮播图的形式循环展示当前会员的所有卡信息。这个会员卡信息需要先用变量从数据源读取…

【算法】双指针

作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下来🐾 文章目录1.双指针分类2.双指针思想3.双指针应用1.双指针分类 常见问题分类 (1) 对于一个序列,用两个指针维护一段区间, 比如快速排序。 …

SQL代码编码原则和规范

目录1、先了解MySQL的执行过程2、数据库常见规范3、所有表必须使用Innodb存储引擎4、每个Innodb表必须有个主键5、数据库和表的字符集统一使用UTF86、查询SQL尽量不要使用select *,而是具体字段7、避免在where子句中使用 or 来连接条件8、尽量使用数值替代字符串类型…

POI处理Excel (xlsx格式) 设置单元格格式为数值 且千分位分隔 保留两位小数

背景 某公司导出的一个Excel 其中有三列数据 是数字 但是导出后 实际上格式为 数值形式的字符串 客户要求这三列的格式改为 数值格式 且千分位分隔 保留两位小数 分析原因 先看导出用到了什么工具 查看源码发现 导出 使用了 EasyExcel 立马想到 一般情况下导出实体的字段类…

layui框架学习(7:选项卡样式)

选项卡(Tab)在C/S程序和B/S程序中应用比较广泛,CSDN中也能看到选项卡的身影(如下图所示)。Layui内置多种Tab风格,支持删除选项卡、并提供响应式支持。Layui官方教程中主要介绍了选项卡相关的样式设置&#…

Windows Server 2016远程桌面配置全过程

镜像下载 系统镜像网址 本次下载的是 Windows Server 2016 (Updated Feb 2018) (x64) - DVD (Chinese-Simplified) 远程桌面配置 Step 1 在开始菜单搜索服务,打开服务器管理器,点击右上角的管理按钮 Step 2 添加角色控制,点击下一步 S…

如何描述建筑在新型电力系统中的基本特征?——现状与展望(刘晓华)

刘晓华等人 | 如何描述建筑在新型电力系统中的基本特征?——现状与展望 2022如何描述建筑在新型电力系统中的基本特征?——现状与展望 摘要 建筑领域是实现碳中和目标的重要部门,未来零碳能源系统中建筑有望成为集能源生产、消费、调蓄“三…

【Redis】一、CentOS64 安装 Redis

1.下载redis https://download.redis.io/releases/2.将 redis 安装包拷贝到 /opt/ 目录 最好自己创建一个文件夹 3.解压 tar -zvxf redis-6.2.1.tar.gz4. 安装gcc yum install gcc5. 进入目录 cd /opt/redis/redis-6.2.1/6. 编译 make7.执行 make install 进行安装 8. …

Redis面试题:1~2亿条数据需要缓存,请问如何设计这个存储案例

目录 前言 一、哈希取余分区 优点 缺点 二、一致性哈希算法分区 背景 步骤 ① 算法构建一致性哈希环 ② 服务器IP节点映射 ③ key落到服务器的落键规则 优点 ① 容错性 ② 扩展性 缺点 三、哈希槽分区 前言 单机单台100%不可能,肯定是分布式存储&am…

【深度递归网络超分辨率双三次插值图像】

MuRNet: A deep recursive network for super resolution of bicubically interpolated images (MuRNet:深度递归网络超分辨率双三次插值图像) 在许多实际情况下(如打印机设备和相机内插值),只有低分辨率图像的插值版…