网络爬虫直播观看总结(掘金直播第十期)
栏目: JavaScript · 发布时间: 6年前
内容简介:第一次完整看了一次技术直播,静距离地接触到了崔庆才老师,正是他的网易课程让我入了爬虫的门,成功地开发爬虫爬取到了想要的数据,体验了数据抓取的乐趣。借此良机,在这里我想简单总结整理一下我所学到的以及这次直播听到的关于爬虫的所有知识,有什么地方不够准确,欢迎大家指正,相互学习。(哭,在崔神写完之后发布,压力很大的,参考部分不少,毕竟主要按崔神思路来写的,崔神分享链接:文章分为五部分,按照崔老师的思路讲下去,同时穿插个人补充这一部分主要讲的是怎么才能拿到想要的数据源
第一次完整看了一次技术直播,静距离地接触到了崔庆才老师,正是他的网易课程让我入了爬虫的门,成功地开发爬虫爬取到了想要的数据,体验了数据抓取的乐趣。借此良机,在这里我想简单总结整理一下我所学到的以及这次直播听到的关于爬虫的所有知识,有什么地方不够准确,欢迎大家指正,相互学习。(哭,在崔神写完之后发布,压力很大的,参考部分不少,毕竟主要按崔神思路来写的,崔神分享链接: juejin.im/post/5bce82…
文章分为五部分,按照崔老师的思路讲下去,同时穿插个人补充
- 爬取
- 解析
- 存储
- 防反爬
- 加速
第一部分 爬取
这一部分主要讲的是怎么才能拿到想要的数据源
爬取类型
主要分为两种:
-
服务端渲染(页面结果是由服务器渲染后返回的,有效信息包含在请求直接返回的HTML页面中)
-
客户端渲染(页面结果由JavaScript渲染而成,html 仅仅作为静态文件,客户端在请求时,服务端不做任何处理,直接以原文件的形式返回给客户端,然后根据 html 上的 JavaScript,生成 DOM 插入 html显示数据)
针对不同类型,解决方法自然不同
服务端渲染类型解决方法
对于第一种服务端渲染类型,直接通过各种库请求拿到HTML页面即可(数据在HTML页面上) 这里列举如下库可做参考研究深入:
- 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、PyV8、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 等
反爬
随着公司对自己数据的保护意识不断提高,现在很多小公司网站都已经添加反爬检测,爬虫可以说是越来越不容易
防爬方式有非浏览器检测,封IP,封账号,字体反爬等
封ip,账号
爬久了会拒绝服务请求,可通过交替更换ip爬取,用代理解决,可以分为几种情况来处理:
- 首先寻找手机站点、App 站点,如果存在此类站点,反爬会相对较弱,先找软柿子下手嘛。
- 使用代理,如抓取免费代理、购买付费 Tor 代理、Socks 代理等。
- 在代理的基础上维护自己的代理池,防止代理浪费,保证实时可用。
- 搭建 ADSL 拨号代理,稳定高效。
- 寻找无登录接口,尽可能寻找⽆无需登录即可爬取的接口。
- 维护 Cookies 池,使⽤用批量账号模拟登录,使⽤时随机挑选可用 Cookies 使⽤即可
验证码
- 普通图形验证码,如果非常规整且没有变形或干扰,可以使用 OCR 识别,也可以使用机器学习方面图片识别来模型训练,当然打码平台是最方便的方式。
- 对于算术题验证码,推荐直接使用打码平台。
- 对于滑动验证码,可以使用破解算法,也可以模拟滑动(模拟真人拖动规律先是加速滑动后减速)。后者的关键在于缺口的找寻,可以使用图片比对,也可以写基本的图形识别算法,也可以对接打码平台,也可以使用深度学习训练识别接口。
- 对于点触验证码,推荐使用打码平台。对于手机验证码,可以使用验证码分发平台,也可以购买专门的收码设备,也可以人工验证
- 对于扫二维码,可以人工扫码,也可以对接打码平台。
加速
数据量大时候,高效快速爬取是当下的关键问题
- 多进程,多线程
- 异步
- 分布式
- 优化
- 架构
最后捧上崔神总结的脑图,致敬崔神!
最后我想说一下自己的感受,当初学爬虫就是为了爬取数据自动化生成表格,解决生活中的繁杂重复无意义的事,机缘巧合竟在其中寻找到了一些乐趣成就感,深入学习了不少,想把爬虫作为以后的主要方向,但随着我不断地了解认识到如今爬虫的前景不是特别明朗,然后由于很多方面原因吧,也是参考崔神建议,最终决定把爬虫作为兴趣作为一个支线带着做一做,会一如既往地继续学习研究下去,因为我知道抓取大量数据那种成就感是货真价实,是无关乎任何外界因素的个人,所有如果大家也有同样的纠结疑虑,希望我的分享可以给你一些参考,没事的时候,让我们抛下一切,回归当初学爬虫的心态,多爬爬数据,感受其中的魅力。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 我的 Python 网络爬虫直播分享要来了!
- 一文盘点直播技术中的编解码、直播协议、网络传输与简单实现
- 一文盘点直播技术中的编解码、直播协议、网络传输与简单实现
- 直播与 RTC 融合
- 直播协议
- 熊猫直播技术架构演进
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
机器与人:埃森哲论新人工智能
【美】保罗•多尔蒂 詹姆斯•威尔逊 / 赵亚男 / 中信出版社 / 2018-10-1 / 49.00元
自人工智能问世以来,人们普遍持有人机对立的观点,且无时无刻不在害怕自己的工作会被人工智能取代。作者认为,是时候抛开这些无谓的担忧了,因为人类社会正走向一个与机器共融共生的时代。 未来的新型工作模式是什么?未来有哪些工作不会被人工智能取代?人工智能时代重要的生存技能是什么?本书围绕这三大核心问题做了透彻的分析。作者带我们见识了置于业务流程背景之下的人工智能,阐述了其在不同职能部门中起到的推动作......一起来看看 《机器与人:埃森哲论新人工智能》 这本书的介绍吧!