网络爬虫直播观看总结(掘金直播第十期)

前言

第一次完整看了一次技术直播,静距离地接触到了崔庆才老师,正是他的网易课程让我入了爬虫的门,成功地开发爬虫爬取到了想要的数据,体验了数据抓取的乐趣。借此良机,在这里我想简单总结整理一下我所学到的以及此次直播听到的关于爬虫的全部知识,有什么地方不够准确,欢迎你们指正,相互学习。(哭,在崔神写完以后发布,压力很大的,参考部分很多,毕竟主要按崔神思路来写的,崔神分享连接:juejin.im/post/5bce82…html

文章分为六部分,按照崔老师的思路讲下去,同时穿插我的补充python

  • 爬取
  • 解析
  • 存储
  • 框架scrapy
  • 防反爬
  • 加速

爬取

这一部分主要讲的是怎么才能拿到想要的数据源正则表达式

爬取类型

主要分为两种:算法

  • 服务端渲染(页面结果是由服务器渲染后返回的,有效信息包含在请求直接返回的HTML页面中)

服务器端渲染架构图

  • 客户端渲染(页面结果由JavaScript渲染而成,html 仅仅做为静态文件,客户端在请求时,服务端不作任何处理,直接以原文件的形式返回给客户端,而后根据 html 上的 JavaScript,生成 DOM 插入 html显示数据)

针对不一样类型,解决方法天然不一样数据库

服务端渲染类型解决方法

对于第一种服务端渲染类型,直接经过各类库请求拿到HTML页面便可(数据在HTML页面上) 这里列举以下库可作参考研究深刻:json

  • urllib(Python自带的原生底层库)
  • urllib3(相比urllib增长不少新特性和功能)
  • pycurl(libcurl的Python实现)
  • hyper(支持HTTP2的新特性)
  • requests(应用最普遍的HTTP请求库,推荐)
  • grab(基于urllib3和PyQuery封装)

客户端渲染类型解决方法

此种情形通常是用第一种方法没法请求查看到想要抓取的数据,采用如下四种方法浏览器

  • 寻找Ajax请求

AJAX 是一种用于建立快速动态网页的技术。经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。有不少使用 AJAX的应用程序案例:新浪微博、Google 地图、开心网等等。服务器

解决方法:多线程

直接使用 Chrome/Firefox 的开发者工具直接查看 Ajax 具体的请求方式、参数等内容,而后用 HTTP 请求库模拟便可架构

另外还能够经过设置代理抓包来查看接口,如 Fiddler/Charles

  • 模拟浏览器执行

适用于网页接口和逻辑较复杂的状况

使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等来实现

  • 直接提取JavaScript数据

此种状况数据隐藏在JavaSript变量中,直接利用正则表达式等方式提取解析便可

  • 模拟执行JavaScript

直接模拟浏览器执行效率低,能够经过执行JavaScript完成数据获取,经过Selenium、PyExecJS、PyV八、js2py 等库帮助完成

APP数据爬取

  • 普通接口 直接请求

抓取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库处理便可

以上解析都是每次爬取一个网页数据,就要从新构造数据解析规则,甚是繁琐麻烦,若是数据量不大,本身复制粘贴都比较方便,那样有没有一种方法解决这个问题呢

机器学习大展身手的今天,爬虫领域也有它的身影。因而有了智能解析!

下面分为四个方法进行了划分:

  • readability算法,这个算法定义了不一样区块的不一样标注集合,经过权重计算来获得最可能的区块位置。
  • 疏密度判断,计算单位个数区块内的平均文本内容长度,根据疏密程度来大体区分。
  • Scrapyly 自学习,是 Scrapy开发的组件,指定⻚页⾯面和提取结果样例例,其可自学习提取规则,提取其余同类页⾯。
  • 深度学习,使⽤用深度学习来对解析位置进⾏有监督学习,须要⼤量标注数据。

固然如今机器学习算法的准确率还不能达到100%,会有数据出错,水比较深

存储

数据解析下来后,数据就得存储起来,能够做为数据挖掘和机器学习的数据源,这里说一下常见的存储方式

  • 文件 如 JSON、CSV、TXT、图⽚、视频、⾳频等
  • 数据库,分为关系型数据库、非关系型数据库,如 MySQL、MongoDB、HBase 等
  • 搜索引擎,如 Solr、ElasticSearch 等,便于检索和实现⽂本匹配
  • 云存储,某些媒体文件能够存到如七⽜牛云、又拍云、阿里云、腾讯云、Amazon S3 等

框架

从请求数据源到清洗解析数据,最后到存储,这个爬虫的基本三部就这样结束了,用python的各类库,是否是以为很乱,下面我就简单说说关于爬虫的框架,这些开源的爬虫框架把复杂的问题解决掉,而后封装,提供各类类函数让咱们用的很简单、方便,没必要考虑那些URL去重、代理、线程池管理等等问题,每次开发只须要着重考虑抓取逻辑,可是想入手框架,有必定门槛,建议看看源码,多想一想他们的设计思想以及实现逻辑。

以上是一些经常使用框架的对比图,没有绝对的好坏,不一样的框架需求点不一样

最近学习了scrapy框架,所以在这里总结一下主要的逻辑图,不细说 先上逻辑图

主要的逻辑步骤八步(由标号1开始到8):

  • 首先第一次经过start_url设置爬取首页面,调用内置的start_request方法发起requests请求交给爬虫引擎ENGINE处理
  • ENGINE交给SCHEDULER调度器处理
  • 调度器队列调度发起requests请求
  • 由调度器发起的requests请求ENGINE将其交给DOWNLOADER请求下载网页
  • 请求返回response结果交给ENGINE
  • ENGINE将请求返回的response交给spider解析
  • spider解析返回数据清洗整理成的items项,并解析其中页面可能含有的新连接生成requests,一样交至ENGINE
  • ENGINE将items项交给ITEM PIPELINES存储,requests交给调度器调度

以上即是主要scrapy框架逻辑,其中MIDDLEWARE称为中间件,分为downloader middleware(用以另外处理requests和response对象)和spider middleware(一个Scrapy的spider处理机制的钩子框架,你能够插入自定义的功能用来处理engine发往spider的response和spider发往engine的request和item)

scrapy框架博大精深,持续挖掘中。。。。。

反爬

随着公司对本身数据的保护意识不断提升,如今不少小公司网站都已经添加反爬检测,爬虫能够说是愈来愈不容易

防爬方式有非浏览器检测,封IP,封帐号,字体反爬等

封ip,帐号

爬久了会拒绝服务请求,可经过交替更换ip爬取,用代理解决,能够分为几种状况来处理:

  • 首先寻找手机站点、App 站点,若是存在此类站点,反爬会相对较弱,先找软柿子下手嘛。
  • 使用代理,如抓取免费代理、购买付费 Tor 代理、Socks 代理等。
  • 在代理的基础上维护本身的代理池,防止代理浪费,保证明时可用。
  • 搭建 ADSL 拨号代理,稳定高效。
  • 寻找无登陆接口,尽量寻找⽆无需登陆便可爬取的接口。
  • 维护 Cookies 池,使⽤用批量帐号模拟登陆,使⽤时随机挑选可用 Cookies 使⽤便可

验证码

  • 普通图形验证码,若是很是规整且没有变形或干扰,可使用 OCR 识别,也可使用机器学习方面图片识别来模型训练,固然打码平台是最方便的方式。
  • 对于算术题验证码,推荐直接使用打码平台。
  • 对于滑动验证码,可使用破解算法,也能够模拟滑动(模拟真人拖动规律先是加速滑动后减速)。后者的关键在于缺口的找寻,可使用图片比对,也能够写基本的图形识别算法,也能够对接打码平台,也可使用深度学习训练识别接口。
  • 对于点触验证码,推荐使用打码平台。对于手机验证码,可使用验证码分发平台,也能够购买专门的收码设备,也能够人工验证
  • 对于扫二维码,能够人工扫码,也能够对接打码平台。

加速

数据量大时候,高效快速爬取是当下的关键问题

  • 多进程,多线程
  • 异步
  • 分布式
  • 优化
  • 架构

最后捧上崔神总结的脑图,致敬崔神!

最后我想说一下本身的感觉,当初学爬虫就是为了爬取数据自动化生成表格,解决生活中的繁杂重复无心义的事,机缘巧合竟在其中寻找到了一些乐趣成就感,深刻学习了很多,想把爬虫做为之后的主要方向,但随着我不断地了解认识到现在爬虫的前景不是特别明朗,而后因为不少方面缘由吧,也是参考崔神建议,最终决定把爬虫做为兴趣做为一个支线带着作一作,会一如既往地继续学习研究下去,由于我知道抓取大量数据那种成就感是货真价实,是无关乎任何外界因素的我的,全部若是你们也有一样的纠结疑虑,但愿个人分享能够给你一些参考,没事的时候,让咱们抛下一切,回归当初学爬虫的心态,多爬爬数据,感觉其中的魅力。

相关文章
相关标签/搜索