第一次完整看了一次技术直播,静距离地接触到了崔庆才老师,正是他的网易课程让我入了爬虫的门,成功地开发爬虫爬取到了想要的数据,体验了数据抓取的乐趣。借此良机,在这里我想简单总结整理一下我所学到的以及此次直播听到的关于爬虫的全部知识,有什么地方不够准确,欢迎你们指正,相互学习。(哭,在崔神写完以后发布,压力很大的,参考部分很多,毕竟主要按崔神思路来写的,崔神分享连接:juejin.im/post/5bce82…html
文章分为六部分,按照崔老师的思路讲下去,同时穿插我的补充python
这一部分主要讲的是怎么才能拿到想要的数据源正则表达式
主要分为两种:算法
针对不一样类型,解决方法天然不一样数据库
对于第一种服务端渲染类型,直接经过各类库请求拿到HTML页面便可(数据在HTML页面上) 这里列举以下库可作参考研究深刻:json
此种情形通常是用第一种方法没法请求查看到想要抓取的数据,采用如下四种方法浏览器
AJAX 是一种用于建立快速动态网页的技术。经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。有不少使用 AJAX的应用程序案例:新浪微博、Google 地图、开心网等等。服务器
解决方法:多线程
直接使用 Chrome/Firefox 的开发者工具直接查看 Ajax 具体的请求方式、参数等内容,而后用 HTTP 请求库模拟便可架构
另外还能够经过设置代理抓包来查看接口,如 Fiddler/Charles
适用于网页接口和逻辑较复杂的状况
使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等来实现
此种状况数据隐藏在JavaSript变量中,直接利用正则表达式等方式提取解析便可
直接模拟浏览器执行效率低,能够经过执行JavaScript完成数据获取,经过Selenium、PyExecJS、PyV八、js2py 等库帮助完成
抓取HTTP/HTTPS数据包,利用 Charles、Fiddler、mitmproxy软件
接口的参数通过加密,每次请求有随机生成的token 一是能够实时处理,利用 Fiddler、mitmdump、Xposed 等,其次能够是将加密逻辑破解,直接模拟构造规则便可,还能够直接反编译破解。
接口返回结果通过加密
1.利用Appium,可见便可爬,相似Selenium 2.Xposed 使用hook来获取结果 3.反编译 找出使用的加密算法,模拟便可 4.改写手机底层操做系统源码
利用WireShark抓取全部协议包 利用Tcpdunp抓取TCP数据包
数据源拿到了,不少地方无用信息太多,须要咱们进一步进行数据清洗加工
HTML页面数据 利用四大种数据解析方法,(在相应的库中都会提供),Xpath,CSS,正则表达式,Selector,这些解析都有各自的解析规则,每一个拿些例子用用就记住会用了,推荐用Xpath
其余类型 对于接口返回的json,xml类型,直接用json,xml2dict库处理便可
以上解析都是每次爬取一个网页数据,就要从新构造数据解析规则,甚是繁琐麻烦,若是数据量不大,本身复制粘贴都比较方便,那样有没有一种方法解决这个问题呢
机器学习大展身手的今天,爬虫领域也有它的身影。因而有了智能解析!
下面分为四个方法进行了划分:
固然如今机器学习算法的准确率还不能达到100%,会有数据出错,水比较深
数据解析下来后,数据就得存储起来,能够做为数据挖掘和机器学习的数据源,这里说一下常见的存储方式
从请求数据源到清洗解析数据,最后到存储,这个爬虫的基本三部就这样结束了,用python的各类库,是否是以为很乱,下面我就简单说说关于爬虫的框架,这些开源的爬虫框架把复杂的问题解决掉,而后封装,提供各类类函数让咱们用的很简单、方便,没必要考虑那些URL去重、代理、线程池管理等等问题,每次开发只须要着重考虑抓取逻辑,可是想入手框架,有必定门槛,建议看看源码,多想一想他们的设计思想以及实现逻辑。
最近学习了scrapy框架,所以在这里总结一下主要的逻辑图,不细说 先上逻辑图
以上即是主要scrapy框架逻辑,其中MIDDLEWARE称为中间件,分为downloader middleware(用以另外处理requests和response对象)和spider middleware(一个Scrapy的spider处理机制的钩子框架,你能够插入自定义的功能用来处理engine发往spider的response和spider发往engine的request和item)
scrapy框架博大精深,持续挖掘中。。。。。
随着公司对本身数据的保护意识不断提升,如今不少小公司网站都已经添加反爬检测,爬虫能够说是愈来愈不容易
防爬方式有非浏览器检测,封IP,封帐号,字体反爬等
爬久了会拒绝服务请求,可经过交替更换ip爬取,用代理解决,能够分为几种状况来处理:
数据量大时候,高效快速爬取是当下的关键问题
最后捧上崔神总结的脑图,致敬崔神!
最后我想说一下本身的感觉,当初学爬虫就是为了爬取数据自动化生成表格,解决生活中的繁杂重复无心义的事,机缘巧合竟在其中寻找到了一些乐趣成就感,深刻学习了很多,想把爬虫做为之后的主要方向,但随着我不断地了解认识到现在爬虫的前景不是特别明朗,而后因为不少方面缘由吧,也是参考崔神建议,最终决定把爬虫做为兴趣做为一个支线带着作一作,会一如既往地继续学习研究下去,由于我知道抓取大量数据那种成就感是货真价实,是无关乎任何外界因素的我的,全部若是你们也有一样的纠结疑虑,但愿个人分享能够给你一些参考,没事的时候,让咱们抛下一切,回归当初学爬虫的心态,多爬爬数据,感觉其中的魅力。