写的不好, 请多担待
爬虫从最基础的请求网页库 urllib开始, 然后延续到requests库,伪造下浏览器的头部,然后通过你会的各式各样的解析库(lxml, scrapy的Selector, pyquery, bs4....), 就已经可以简单的抓取一些网页的静态数据,每个网站对其数据有着不同的看法,也就导致了会有对数据加密的问题
首先的话,一个时间段频繁的访问网站,会导致ip封锁的问题,所以首先的准备好买的代理(毕竟网上免费的大多数都是没有用的,时效太短)
效率:
使用多线程和线程池提高抓取效率, 当然ip质量也会影响, 然后是网站的响应效率, 当然像celery这种分布式框架,还是可以看看的,了解不多不多说
网页端:
对于动态加载数据的网站,js加载数据,或者是json加载数据的网站, 可以分析网站其api接口,查看其api请求的过程,构造参数模拟请求,然而有些的api接口的请求有些会有js加密,对于js加密,这也是很常规的手段。
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
说到加密了, 就要谈下字体加密, 说到字体加密,就要了解其字体加密的过程,
字体加密:也就是字体的自定义,先看看加密的吧,举个例子(大众点评)
看到这里, 没错人均后面的数字加密了, chrome F12打开调试关闭字体样式、
数字字体已经全部消失了,这就是字体加密后的
字体怎么加密?
首先的话, 就是准备好一个字体ttf文件, 然后通过fonttools将其提取,通过 http://fontello.com/ 然后选择加密转化字体 就会生成转化后的文件了,使用自定的字体,路径设置好,就可以转化为加密的字体了。
@font-face {
font-family: "自定义字体的名称";
src: "自定义字体的路径"
}
当然知道了加密过程解密也就变的顺手了,首先的话,第一次处理的时候,就是将字体文件抓取,然后通过fonttools转为为xml文件, 每个字体TTGlyph 都对应这一个字,当然注意
的是字体的坐标是没有变化的,所以建立字体字典,对应好,至于坐标对应的字是什么, 可以通过matplotlib把坐标绘出图看看,然后将其对应即可, 字体解密也就完成了。
字体加密说完了, 说说网站登录的问题:
因为有些网站需要登陆才可以访问其数据, 对于需要登陆的网站给出三个方法
网站登录可能会碰见验证码, 说说验证码:
这些验证码大多是数字和字母组成,然后在此之上再添加一些像毛一样的线,或者搞一些噪点,或者把这些字符扭曲一下,为了增加识别难度也是辛苦
图片验证码处理:
当然他们顺着来, 我们反着去, 先去个噪声,然后让图片最高黑白化(去灰度, 二值化),然后通过python的ocr工具 python-tesseract 去识别(这个也就只能打打低级的小怪兽了), 在网上发现了awesome-python-login-model 开源的模拟登录项目还是挺好用的,
也可以机器学习,生成接口,图片识别,太耗费资源了,准确率不高,土豪的话就当没看见,当然有其他好方法可以留言,感谢
滑块验证码处理:
现在的滑块验证码很多都是极验验证码,对于极验验证码的滑块处理,其验证码生成的时候,在源码中产生图片的几行代码,将其抓取,因为其图片都是切割好的几十张小图片,所以需要使用pillow将其平成一个完整的图片,然后将两张图片进行对比,找到其缺口的地址,然后通过模拟滑块拖动即可
选字的验证码处理:
比较典型的就是12306登录,这个验证码网上已经有了开源的项目,正确率挺高,并不用再次探索
移动端:
对于现在, 很多的app都已经将官网变为app的下载页面,将app作为主要的移动数据来源,pc端与手机端的数据流量比已经达到1:7,所以app的抓包必不可少,App的抓包, 就需要了解appium,fiddler , mitmdump, charles..... 一些常用的手机抓包软件, 模拟器抓包效率已经很低了, 因为现在的模拟器很多都是android4,5 但是现在很多的app运行的最低条件都是android5,还有有些app(小红书)会检测是否在模拟器上运行,所以必须要掌握 真机抓包,对于app的数据抓取也分为两种。
因为现在很多都牵扯到sign签名加密(比如毒),这个就是js加密了,需要自己去掌握调试过程,了解js语法也就不可少了