帮你深入了解爬虫与反爬虫技术

发布时间:2022-07-24 02:00:05 作者:cicada 阅读量:8915

爬虫是什么呢,简单而片面的说,爬虫就是由计算机自动与服务器交互获取数据的工具。爬虫的最基本就是get一个网页的源代码数据,如果更深入一些,就会出现和网页进行POST交互,获取服务器接收POST请求后返回的数据。一句话,爬虫用来自动获取源数据,至于更多的数据处理等等是后续的工作,这篇文章主要想谈谈爬虫获取数据的这一部分。爬虫请注意网站的Robot.txt文件,不要让爬虫违法,也不要让爬虫对网站造成伤害。
 

反爬及反反爬概念的不恰当举例

基于很多原因(如服务器资源,保护数据等),很多网站是限制了爬虫效果的。

考虑一下,由人来充当爬虫的角色,我们怎么获取网页源代码?最常用的当然是右键源代码。

网站屏蔽了右键,怎么办?

拿出我们做爬虫中最有用的东西 F12(欢迎讨论)

同时按下F12就可以打开了(滑稽)

 源代码出来了!!

在把人当作爬虫的情况下,屏蔽右键就是反爬取策略,F12就是反反爬取的方式。

讲讲正式的反爬取策略

事实上,在写爬虫的过程中一定出现过没有返回数据的情况,这种时候也许是服务器限制了UA头(user-agent),这就是一种很基本的反爬取,只要发送请求的时候加上UA头就可以了…是不是很简单?

其实一股脑把需要不需要的Request Headers都加上也是一个简单粗暴的办法……

有没有发现网站的验证码也是一个反爬取策略呢?为了让网站的用户能是真人,验证码真是做了很大的贡献。随验证码而来的,验证码识别出现了。

说到这,不知道是先出现了验证码识别还是图片识别呢?

简单的验证码现在识别起来是非常简单的,网上有太多教程,包括稍微进阶一下的去噪,二值,分割,重组等概念。可是现在网站人机识别已经越发的恐怖了起来,比如这种:

简单讲述一下去噪二值的概念

将一个验证码就是二值,也就是将图片本身变成只有两个色调,例子很简单,通过python PIL库里的

Image.convert("1")

就能实现,但如果图片变得更为复杂,还是要多思考一下,比如思考一些这种验证码应该怎么识别?这种时候 去噪 就派上了用处,根据验证码本身的特征,可以计算验证码的底色和字体之外的RGB值等,将这些值变成一个颜色,将字体留出。示例代码如下,换色即可

 


for x in range(0,image.size[0]):

        for y in range(0,image.size[1]):

            # print arr2[x][y]

            if arr[x][y].tolist()==底色:

                arr[x][y]=0

            elif arr[x][y].tolist()[0] in range(200,256) and arr[x][y].tolist()[1] in range(200,256) and arr[x][y].tolist()[2] in range(200,256):

                arr[x][y]=0

            elif arr[x][y].tolist()==[0,0,0]:

                arr[x][y]=0

            else:

                arr[x][y]=255

 

arr是由numpy得到的,根据图片RGB值得出的矩阵,读者可以自己尝试完善代码,亲自实验一下。

细致的处理之后图片可以变成识别率还是很高的。

在验证码的发展中,还算清晰的数字字母,简单的加减乘除,网上有轮子可以用,有些难的数字字母汉字,也可以自己造轮子(比如上面),但更多的东西,已经足够写一个人工智能了……(有一种工作就是识别验证码…)

再加一个小提示:有的网站PC端有验证码,而手机端没有…

下一个话题!

反爬取策略中比较常见的还有一种封IP的策略,通常是短时间内过多的访问就会被封禁,这个很简单,限制访问频率或添加IP代理池就OK了,当然,分布式也可以…

IP代理池->左转Google右转baidu,有很多代理网站,虽然免费中能用的不多 但毕竟可以。

还有一种也可以算作反爬虫策略的就是异步数据,随着对爬虫的逐渐深入(明明是网站的更新换代!),异步加载是一定会遇见的问题,解决方式依然是F12。以不愿透露姓名的网易云音乐网站为例,右键打开源代码后,尝试搜索一下评论

数据呢?!这就是JS和Ajax兴起之后异步加载的特点。但是打开F12,切换到NetWork选项卡,刷新一下页面,仔细寻找,没有秘密。

哦,对了 如果你在听歌的话,点进去还能下载呢…

仅为对网站结构的科普,请自觉抵制盗版,保护版权,保护原创者利益。

如果说这个网站限制的你死死的,怎么办?我们还有最后一计,一个强无敌的组合

selenium + PhantomJs

这一对组合非常强力,可以完美模拟浏览器行为,具体的用法自行百度,并不推荐这种办法,很笨重,此处仅作为科普。

总结

本文主要讨论了部分常见的反爬虫策略(主要是我遇见过的(耸肩))。主要包括 HTTP请求头,验证码识别,IP代理池,异步加载几个方面,介绍了一些简单方法(太难的不会!),以Python为主。希望能给初入门的你引上一条路,希望能遇见更多的走在路上的前辈。

*本文作者:野火研习社1,转载请注明来自FreeBuf.COM

***本网站图片,文字之类版权申明,因为网站可以由注册用户自行上传图片或文字,本网站无法鉴别所上传图片或文字的知识版权,如果侵犯,请及时通知我们,本网站将在第一时间及时删除。

我要评论

网友评论


评论时间:2023-07-13 21:25:02

天翼云主机 9.将游戏重新服务器主机排名 开始


评论时间:2023-03-09 18:25:02

形成了一批具有一定影响力云主机和云服务器有区别吗 的领军企戴尔服务器机柜尺寸 批具有一定影响力的领军企业


评论时间:2022-09-08 18:25:02

2、如果您是服务器机箱厂家 用微软x86或者其他品牌的主机来使用,那么七日杀如何开服务器 来使用,那么您需要支付怎样的价格呢


评论时间:2022-09-02 12:25:01

本书以实际工云虚拟主机能挂软件吗 作为背景,通过大量的实例来介绍相关知识和技巧,并配有丰富的练习题供读者练习使用弹性云主机 习使用


评论时间:2022-08-17 06:25:02

由于其编程方式非服务器机柜报价低 常简单,因此很快被广大程序虚拟主机都有哪些 此很快被广大程序员所接受


评论时间:2022-08-08 00:25:02

18.腾讯云主机教程 可靠性饥荒服务器组租用多少钱

最新文章

 2023-12-25 22:44:35   admin

活动发布区版规

 2023-05-27 22:03:52   御风而行

容器、无服务器、虚拟机:安全性差...

 2023-05-27 19:08:41   小绵羊0123

科技巨头布局云端 服务器 网络硬...

 2023-05-27 18:17:46   姐姐的跟屁虫

钉钉因系统访问流量激增,宕机1小...

热门阅读

 2022-07-23 00:34:02   freeatom

常见ftp命令 FTP命令使用详...

 2022-07-21 02:17:02   ares

双硬盘组建Raid0磁盘阵列图文...

 2022-07-20 06:17:02   mankeung123

用友软件客户端连接不上服务器的解...

 2022-07-23 00:51:02   antonfxb

WebService实例

 2022-07-13 05:38:02   苯小孩

开发、运维不可不看的Linux调...

 2022-07-20 18:51:02   nightstone

如何使用Charles抓取Web...

随机文章

 2021-12-30 05:38:01   xxmsian

双线服务器托管上数据中心

 2022-01-25 05:38:02   coinchen

按服务器性能类型选购服务器

 2022-01-30 05:38:02   powerdream

如何设置不支持基于域名虚拟主机的...

 2022-02-08 05:38:03   hack-j

在虚拟主机上架设iis服务器

 2022-07-19 13:17:03   wcloud

linux系统安装教程

 2022-07-19 15:51:02   wind74536

红旗linux视频教程-VMar...

热评文章

 2022-07-19 20:17:02   dengyu0429

linux vi使用及详细介绍

 2022-07-20 01:00:05   激动的舌头

Linux视频教程:用户管理命令...

 2022-07-21 20:51:02   jessica-an

创建本地FTP站点

 2022-02-07 05:38:03   jasonkidd

WEB服务器配置详解

 2022-07-20 04:51:02   wolfssss

ACL权限-默认与递归(4)

 2022-07-22 15:00:05   淡水珊瑚

Linux下 Samba Ser...
全球云服务器
Catfish(鲶鱼) Blog V 4.7.3