自我学习爬虫的一些???

写的不好, 请多担待

爬虫从最基础的请求网页库 urllib开始, 然后延续到requests库,伪造下浏览器的头部,然后通过你会的各式各样的解析库(lxml, scrapy的Selector, pyquery, bs4....), 就已经可以简单的抓取一些网页的静态数据,每个网站对其数据有着不同的看法,也就导致了会有对数据加密的问题

 

首先的话,一个时间段频繁的访问网站,会导致ip封锁的问题,所以首先的准备好买的代理(毕竟网上免费的大多数都是没有用的,时效太短)

 

效率:

使用多线程和线程池提高抓取效率, 当然ip质量也会影响, 然后是网站的响应效率, 当然像celery这种分布式框架,还是可以看看的,了解不多不多说

 

网页端:

对于动态加载数据的网站,js加载数据,或者是json加载数据的网站, 可以分析网站其api接口,查看其api请求的过程,构造参数模拟请求,然而有些的api接口的请求有些会有js加密,对于js加密,这也是很常规的手段。

  1. 暴力点,可以通过chrome打断点去进行调试,查看其js代码, 慢慢调试,寻找到其js加密的相关函数或者的话使用fiddler, mitdump,然后通过python的三方库(execjs, js2py)去运行, 得到加密的参数,然后就可以顺利的抓取数据。
  2. 委婉点 ,使用selenium 打开浏览器,会产生加载js后的代码,所以也是一种方法,但是有一些网站对其进行了检测(window.navigator.webdriver)查看其结果分析是否使用了selenium, 然后禁止访问, 当然通过运行js代码将其设置过也可以,但是再次访问一个网站,又会回到原来的值,所以在访问前将chrome的设置调好即可

           option = ChromeOptions()  

           option.add_experimental_option('excludeSwitches', ['enable-automation'])

 

说到加密了, 就要谈下字体加密, 说到字体加密,就要了解其字体加密的过程,

字体加密:也就是字体的自定义,先看看加密的吧,举个例子(大众点评)

 

自我学习爬虫的一些???_第1张图片自我学习爬虫的一些???_第2张图片

 

看到这里, 没错人均后面的数字加密了, chrome F12打开调试关闭字体样式、

11111自我学习爬虫的一些???_第3张图片

数字字体已经全部消失了,这就是字体加密后的

 

 

字体怎么加密?

首先的话, 就是准备好一个字体ttf文件, 然后通过fonttools将其提取,通过 http://fontello.com/  然后选择加密转化字体 就会生成转化后的文件了,使用自定的字体,路径设置好,就可以转化为加密的字体了。

@font-face {

                font-family: "自定义字体的名称";

                src: "自定义字体的路径"            

}

 

当然知道了加密过程解密也就变的顺手了,首先的话,第一次处理的时候,就是将字体文件抓取,然后通过fonttools转为为xml文件, 每个字体TTGlyph 都对应这一个字,当然注意

的是字体的坐标是没有变化的,所以建立字体字典,对应好,至于坐标对应的字是什么, 可以通过matplotlib把坐标绘出图看看,然后将其对应即可, 字体解密也就完成了。

 

 

字体加密说完了, 说说网站登录的问题:

因为有些网站需要登陆才可以访问其数据, 对于需要登陆的网站给出三个方法

  1. Cookie, 打开网站, 登录拿到cookie
  2. 通过抓包, 分析其表单账号密码参数,模拟请求登录
  3. Selenium 自动化登录, 拿cookie参数

 

网站登录可能会碰见验证码, 说说验证码:

这些验证码大多是数字和字母组成,然后在此之上再添加一些像毛一样的线,或者搞一些噪点,或者把这些字符扭曲一下,为了增加识别难度也是辛苦

图片验证码处理:

当然他们顺着来, 我们反着去, 先去个噪声,然后让图片最高黑白化(去灰度, 二值化),然后通过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的数据抓取也分为两种。

  1. 委婉点,通过appium 自动化抓取数据, 模拟器设备最好(在app不能在模拟器安装的时候,选择更低版本的apk)
  2. 直接点,那就是app逆向, 这一部分正在学习当中(包括反编译, 查询代码,一堆的,目前来说, 我也并没有明确的学习路线,推荐一本书  《android软件安全权威指南》  大佬写的,看看还是挺好的, 当然看了下博客, 然后发现一堆的大佬在准备js逆向的高级课程, 有兴趣的可以百度搜索看看)

因为现在很多都牵扯到sign签名加密(比如毒),这个就是js加密了,需要自己去掌握调试过程,了解js语法也就不可少了

你可能感兴趣的:(自我学习爬虫的一些???)