Python | 常见的反爬及解决方法,值得收藏

我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

首先我们来看一下爬虫程序和反爬虫之间的一张逻辑图:

 

 

以下说4种网站反爬虫方式。

 

1.通过User-Agent来控制访问

 

无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers, 表明身份。

 

对于爬虫程序来说,最需要注意的字段就是:User-Agent

 

很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能够正常访问。

 

解决方法:

可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。

 

2.通过JS脚本来防止爬虫

 

举个例子:如果想爬取某个网站,在请求之前,它会有一个验证页面来验证你是否机器。

 

它是怎么实现的呢:

 

他会通过js代码生成一大段随机的数字,然后要求浏览器通过js的运算得出这一串数字的和,再返回给服务器。

 

解决方法:

使用PhantomJS

 

* PhantomJS是一个Python包,他可以在没有图形界面的情况下,完全模拟一个”浏览器“,js脚本验证什么的再也不是问题了。

 

3.通过IP限制来反爬虫

 

如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,那自然会引起注意,管理员可以通过一些手段把这个ip给封了,爬虫程序自然也就做不了什么了。

 

解决方法:

比较成熟的方式是:IP代理池

 

简单的说,就是通过IP代理,从不同的IP进行访问,这样就不会被封掉IP了。

 

可是IP代理的获取本身就是一个很麻烦的事情,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,可以通过自己购买集群云服务来自建代理池。

 

def get_ip_poll():

'''

模拟代理池

返回一个字典类型的键值对,

'''

ip_poll = ["http://xx.xxx.xxx.xxx:8000",

"http://xx.xxx.xxx.xxx:8111",

"http://xx.xxx.xxx.xxx:802",

"http://xx.xxx.xxx.xxx:9922",

"http://xx.xxx.xxx.xxx:801"]

addresses = {}

addresses['http'] = ip_poll[random.randint(0, len(ip_poll))]

 

 return addresses

 

4.通过robots.txt来限制爬虫

 

世界上做爬虫最大最好的就是Google了,搜索引擎本身就是一个超级大的爬虫,Google开发出来爬虫24h不间断的在网上爬取着新的信息,并返回给数据库,但是这些搜索引擎的爬虫都遵守着一个协议:robots.txt

 

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛)。此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似"Disallow: *.gif"这样的通配符[1][2]。

 

当然在特定情况下,比如说我们爬虫的获取网页的速度,和人类浏览网页是差不多的,这并不会给服务器造成太大的性能损失,在这种情况下,我们是可以不用恪守 robots协议的。

 

以上4种反爬方式,你学会了吗?

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有许多常见Python问题和相应的解决方法。以下是几个常见问题及其解决方法的例子: 1. 模块导入错误:如果你遇到了一个模块无法导入的错误,首先确保你已经正确安装了该模块。你可以使用pip命令来安装缺失的模块。如果你已经安装了模块但仍然出现导入错误,可以检查模块名是否正确拼写、所在路径是否正确以及环境变量是否正确配置。 2. 语法错误:当你在编写Python代码时,常常会遇到语法错误。这些错误通常是由于拼写错误、缺少冒号、括号不匹配等引起的。在遇到语法错误时,建议检查代码的拼写和语法结构,确保代码符合Python的语法规则。 3. 程序崩溃或无响应:如果你的Python程序崩溃或者无响应,可以尝试使用try-except语句来捕获可能的异常并进行处理。此外,你还可以使用调试工具来定位问题所在的具体位置,并进行调试修复。 4. 性能问题:如果你的Python程序运行速度较慢,可以尝试使用一些性能优化方法来提升代码执行效率。例如,可以使用适当的数据结构和算法、避免不必要的循环和重复计算、使用并行化或异步编程等技术来提高程序性能。 这只是常见问题的一些解决方法示例,实际上还有许多其他问题和相应的解决方法。对于特定的问题,你可以在搜索引擎或Python社区中寻找更详细的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值