史上最全Python反爬虫方案汇总( 三 )


robots.txt协议并不是一个规范 , 而只是约定俗成的 , 所以并不能保证网站的隐私 。 注意robots.txt是用字符串比较来确定是否获取URL , 所以目录末尾有与没有斜杠“/”表示的是不同的URL 。 robots.txt允许使用类似"Disallow: *.gif"这样的通配符 。
itunes的robots.txt
史上最全Python反爬虫方案汇总文章插图
缺点:只是一个君子协议 , 对于良好的爬虫比如搜索引擎有效果 , 对于有目的性的爬虫不起作用
爬虫方法:如果使用scrapy框架 , 只需将settings文件里的ROBOTSTXT_OBEY 设置值为 False
实现难度:★数据动态加载python的requests库只能爬取静态页面 , 爬取不了动态加载的页面 。 使用JS加载数据方式 , 能提高爬虫门槛 。
爬虫方法:

  • 抓包获取数据url
通过抓包方式可以获取数据的请求url , 再通过分析和更改url参数来进行数据的抓取 。
示例:
  1. 看这部分的包 。 可以看到 , 这部分包里面 , search下面的那个 url和我们访问的地址完全是一样的 , 但是它的response却包含了js代码 。

史上最全Python反爬虫方案汇总文章插图
2. 当在动物图片首页往下滑动页面 , 想看到更多的时候 , 更多的包出现了 。 从图片可以看到 , 下滑页面后得到的是一连串json数据 。 在data里面 , 可以看到thumbURL等字样 。 它的值是一个url 。 这个就是图片的链接 。
史上最全Python反爬虫方案汇总文章插图
3. 打开一个浏览器页面 , 访问thumbURL=",4118301545&fm=27&gp=0.jpg" 发现搜索结果里的图片 。
4. 根据前面的分析 , 就可以知道 , 请求
URL="/search/acjsontn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf8&oe=utf8&adpicid=&st=-1&z=&ic=0&word=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=30&rn=30&gsm=1e&1531038037275=" , 用浏览器访问这个链接确定他是公开的 。
5. 最后就可以寻找URL的规律 , 对URL进行构造便可获取所有照片 。
  • 使用selenium
通过使用selenium来实现模拟用户操作浏览器 , 然后结合BeautifulSoup等包来解析网页通过这种方法获取数据 , 简单 , 也比较直观 , 缺点是速度比较慢 。
缺点:如果数据API没做加密处理 , 容易曝光接口 , 让爬虫用户更容易获取数据 。
实现难度:★数据加密-使用加密算法
  • 前端加密
通过对查询参数、user-agent、验证码、cookie等前端数据进行加密生成一串加密指令 , 将加密指令作为参数 , 再进行服务器数据请求 。 该加密参数为空或者错误 , 服务器都不对请求进行响应 。
  • 服务器端加密
在服务器端同样有一段加密逻辑 , 生成一串编码 , 与请求的编码进行匹配 , 匹配通过则会返回数据 。
爬虫方法:JS加密破解方式 , 就是要找到JS的加密代码 , 然后使用第三方库js2py在Python中运行JS代码 , 从而得到相应的编码 。
缺点:加密算法明文写在JS里 , 爬虫用户还是可以分析出来 。
实现难度:★★★数据加密-使用字体文件映射服务器端根据字体映射文件先将客户端查询的数据进行变换再传回前端 , 前端根据字体文件进行逆向解密 。
映射方式可以是数字乱序显示 , 这样爬虫可以爬取数据 , 但是数据是错误的 。
破解方式:
其实 , 如果能看懂JS代码 , 这样的方式还是很容易破解的 , 所以需要做以下几个操作来加大破解难度 。