当前位置: > python爬虫 >

python爬虫如何突破网站对selenium的限制?
栏目分类:python爬虫   发布日期:2019年03月01日 14:09:51   浏览次数:

一、 引言

      做python爬虫的朋友们都知道selenium是一款强大的工具,只要是在爬取目标网站所能看到的,不管是ajax渲染、JavaScript渲染,用selenium都可以爬取到想要的信息。即“可见即可爬”。然而有些网站如淘宝、优酷、阿里云等网站对selenium做了限制,使抓取不在那么容易。今天我就带大家来实现突破网站对selenium的限制。
 

二、环境要求

1. python3.6以上(mitmproxy要求python3.6以上)
2. 安装好火狐浏览器
3. 安装配置好mitmproxy
 

2.1安装mitmproxy

 
#python3 –m pip install mitmproxy
 

python爬虫

 
是因为安装这个包的 window 系统需要首先安装 Microsoft Visual C++ V14.0以上 才行。

解决:https://visualstudio.microsoft.com/zh-hans/downloads/  去下载安装即可

2.2启动mitmproxy 

#mitmdump -p 8888 -s F:scrapy.worker aobao_crawlerproxy.py

这句命令的意思是以8888端口启动mitmproxy,并注入python脚本proxy.py 。
到这里朋友肯定会问proxy.py 是什么?下面我会解释。

python爬虫 

 
       如上图的代码,可以修改服务器返回的js内容中selenium特征值。此脚本中的response函数会在服务器返回响应的时候执行,关于mitmproxy,详情请百度mitmproxy的用法。
 

三、编写测试脚本

python爬虫 

 
       编写以上内容脚本内容test.py,在启动脚本的时候先启动mitmproxy,并且为火狐浏览器设置好代理安装好证书,没有安装好证书,是不能打开https协议的。
 
 
       启动脚本test.py 会发现浏览器自动打开淘宝页面,然后在浏览器控制台输入navigator.webdriver 按回车键, 发现返回值为false说明突破selenium限制成功。
 
 

python爬虫 

 
 
如果我们在启动mitmproxy的时候没有加入proxy.py脚本,以下面的方式启动。

#mitmdump -p 8888
 
启动测试脚本 在浏览器控制台输入navigator.webdriver 会发现返回是true ,说明没有突破selenium限制
 

python爬虫 

 
 
        总结: 淘宝网站对selenium限制的原理是:因为服务器会在客户端设置一些参数,当检测到客户端是用selenium打开的网页,那么就会有一些selenium特征值,所以我们通过中间人代理工具(mitmproxy)修改服务器返回的js脚本里面有关selenium的特征值,然后就能突破限制了。我们修改selenium特征值的方法在proxy.py脚本,只要在启动mitmproxy时注入此脚本即可。

相关热词:

热门关键词
python字符串
     
python教程 python爬虫 python人工智能 Python+大数据 python问答