Python 爬虫(一):爬虫伪装

news/2024/10/28 18:26:56/

1 简介

对于一些有一定规模或盈利性质比较强的网站,几乎都会做一些防爬措施,防爬措施一般来说有两种:一种是做身份验证,直接把虫子挡在了门口,另一种是在网站设置各种反爬机制,让虫子知难而返。

2 伪装策略

我们知道即使是一些规模很小的网站通常也会对来访者的身份做一下检查,如验证请求 Headers,而对于那些上了一定规模的网站就更不用说了。因此,为了让我们的爬虫能够成功爬取所需数据信息,我们需要让爬虫进行伪装,简单来说就是让爬虫的行为变得像普通用户访问一样。

2.1 Request Headers 问题

为了演示我使用百度搜索 163 邮箱

使用 F12 工具看一下请求信息

在上图中,我们可以看到 Request Headers 中包含 Referer 和 User-Agent 两个属性信息,Referer 的作用是告诉服务器该网页是从哪个页面链接过来的,User-Agent 中文是用户代理,它是一个特殊字符串头,作用是让服务器能够识别用户使用的操作系统、CPU 类型、浏览器等信息。通常的处理策略是:1)对于要检查 Referer 的网站就加上;2)对于每个 request 都添加 User-Agent。

2.2 IP 限制问题

有时我们可能会对一些网站进行长期或大规模的爬取,而我们在爬取时基本不会变换 IP,有的网站可能会监控一个 IP 的访问频率和次数,一但超过这个阈值,就可能认作是爬虫,从而对其进行了屏蔽,对于这种情况,我们要采取间歇性访问的策略。

通常我们爬取是不会变换 IP 的,但有时可能会有一些特殊情况,要长时间不间断对某网站进行爬取,这时我们就可能需要采用 IP 代理的方式,但这种方式一般会增加我们开销,也就是可能要多花钱。

3 总结

有些时候我们进行爬取时 Request Headers 什么的已经做好了伪装,却并未得到如愿以偿的结果,可能会出现如下几种情况:得到的信息不完整、得到不相关的信息、得不到信息,这种情况我们就需要研究网站的防爬机制,对其进行详细分析了。常见的几种我列一下:

1)不规则信息:网址上会有一些没有规则的一长串信息,这种情况通常采用 selenium(模拟浏览器,效率会低一些) 解决;2)动态校验码:比如根据时间及一些其他自定义规则生成,这种情况我们就需要找到其规则进行破解了;3)动态交互:需要与页面进行交互才能通过验证,可以采用 selenium 解决;4)分批次异步加载:这种情况获取的信息可能不完整,可以采用 selenium 解决。


http://www.ppmy.cn/news/68875.html

相关文章

从零开始Vue3+Element Plus后台管理系统(六)——状态管理Pinia和持久化

Pinia 官网:https://pinia.vuejs.org/zh/ Pinia 是 Vue 的专属状态管理库,相比Vuex更好用,优点不多了说官网有,用起来最重要! 在应用的根部注入创建的 pinia // main.ts import { createApp } from vue import { c…

代码量原地缩减50%,这个Java工具类库太香了

Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更…

构造函数(包括默认构造函数) ,析构函数的使用与特性

文章目录 一、构造函数二、默认构造函数(也是构造函数)默认构造函数的种类:1.无参类型2.全缺省类型3.编译器自动生成的4.汇总 三、析构函数 一、构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自…

汇编五、伪指令与汇编程序结构

1、伪指令 1.1、概念 (1)伪指令是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器码,只用于汇编过程中为汇编程序提供汇编信息,帮助编译器编译。 1.2、ASM51提供的伪指令 伪指令分为如下几类。 1.2.1、…

SpringSecurity 一文彻底掌握

文章目录 前言一、SpringSecurity Web方案🍓Test Controller 测试请求控制器🤣SpringSecurity 基本原理🌍代码底层流程:重点看三个过滤器FilterSecurityInterceptor 方法级的权限过滤器ExceptionTranslationFilter 异常过滤器User…

golang web学习随便记6-模板引擎

以下代码是几乎最简单的一个模板&#xff0c;{{ . }} 表示执行模板时将嵌入的数据 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>Go Web 编程</title> <…

C语言200行代码实现简易三子棋

前言 三子棋应该是是我们最早接触到的棋类游戏&#xff0c;用C语言实现三子棋对初学者来说是一种不错的锻炼 编写三子棋只需要用到数组、函数和生成随机数的知识&#xff0c;所以比较适合成为编程学习者编写的第一个小游戏。 一.代码实现 第一部分是源码复制就可以使用&…

C++基础篇:05 静态成员与单例模式

1 静态成员 1.1 什么是静态成员 被static修饰的成员变量、成员函数都称为静态成员 1.2 普通成员的特点 普通成员变量&#xff1a;每个类对象中都独有一份成员变量&#xff0c;相互之间没有任何关联 普通成员函数&#xff1a;都隐藏着一个this指针 1.3 静态成员的特点 静态成…