网络爬虫干货总结!

 

转载:https://cloud.tencent.com/developer/article/1366434

bilibili 视频 - 聊聊 Python 的应用 - 健壮高效的网络爬虫:https://www.bilibili.com/video/av34379204/

 

 

        昨天的时候我参加了掘金组织的一场 Python 网络爬虫主题的分享活动,主要以直播的形式分享了我从事网络爬虫相关研究以来的一些经验总结,整个直播从昨天下午 1 点一直持续到下午 5 点,整整四个小时。

        整个分享分为三个阶段,第一阶段先介绍了自己从大学以来从事编程开发以来的相关历程,第二阶段是正式的网络爬虫分享流程,详细总结了网络爬虫开发的一些要点,第三阶段是解答一些提问,并抽奖送出一些礼品。所以在这里我会对我昨天分享的主要内容做下总结,另外还会附上视频回放、PPT,另外还会为大家送上一些福利,希望大家可以支持!

 

 

 

总括

 

        整个分享的主题叫做《健壮高效的网络爬虫》,本次分享从 抓取、解析、存储、反爬、加速 五个方面介绍了利用 Python 进行网络爬虫开发的相关知识点和技巧,介绍了不同场景下如何采取不同措施高效地进行数据抓取的方法,包括 Web 抓取、App抓取、数据存储、代理选购、验证码破解、分布式抓取及管理、智能解析 等多方面的内容,另外还结合了不同场景介绍了常用的一些工具包,全部内容是我在从事网络爬虫研究过程以来的经验精华总结。

 

 

 

爬取

 

对于爬取来说,我们需要学会使用不同的方法来应对不同情景下的数据抓取任务。

爬取的目标绝大多数情况下 要么是 网页要么是 App,所以这里就分为这两个大类别来进行了介绍。

  • 对于网页来说,我又将其划分为了两种类别,即 服务端渲染客户端渲染。
  • 对于 App 来说,我又针对接口的形式进行了四种类别的划分:普通接口、加密参数接口、加密内容接口、非常规协议接口

 

所以整个大纲是这样子的:

网页爬取

  1. 服务端渲染
  2. 客户端渲染

App 爬取

  1. 普通 接口
  2. 加密参数 接口
  3. 加密内容 接口
  4. 非常规协议 接口
  5. 爬取 / 网页爬取

 

web 网页抓取

 

服务端渲染:意思就是页面的结果是由服务器渲染后返回的,有效信息包含在请求的 HTML 页面里面,比如猫眼电影这个站点。

客户端渲染:意思就是页面的主要内容由 JavaScript 渲染而成,真实的数据是通过 Ajax 接口等形式获取的,比如淘宝、微博手机版等等站点。

 

服务端渲染的情况就比较简单了,用一些基本的 HTTP 请求库就可以实现爬取,如 urllib、urllib3、pycurl、hyper、requests、grab 等框架,其中应用最多的可能就是 requests 了。

 

对于客户端渲染,这里我又划分了四个处理方法:

  1. 寻找 Ajax 接口,此种情形可以直接使用 Chrome/Firefox 的开发者工具直接查看 Ajax 具体的请求方式、参数等内容,然后用 HTTP 请求库模拟即可,另外还可以通过设置代理抓包来查看接口,如 Fiddler/Charles。
  2. 模拟浏览器执行,此种情形适用于网页接口和逻辑较为复杂的情况,可以直接以可见即可爬的方式进行爬取,如可以使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等来实现。
  3. 直接提取 JavaScript 数据,此种情形适用于真实数据没有经过 Ajax 接口获取,而是直接包含在 HTML 结果的某个变量中,直接使用正则表达式将其提取即可。
  4. 模拟执行 JavaScript,某些情况下直接模拟浏览器执行效率会偏低,如果我们把 JavaScript的某些执行和加密逻辑摸清楚了,可以直接执行相关的 JavaScript 来完成逻辑处理和接口请求,比如使用Selenium、PyExecJS、PyV8、js2py 等库来完成即可。

 

 

App 爬取

 

对于 App 的爬取,这里分了四个处理情况:

  1. 对于普通无加密接口,这种直接抓包拿到接口的具体请求形式就好了,可用的抓包工具有 Charles、Fiddler、mitmproxy。
  2. 对于加密参数的接口,一种方法可以实时处理,例如 Fiddler、mitmdump、Xposed 等,另一种方法是将加密逻辑破解,直接模拟构造即可,可能需要一些反编译的技巧。
  3. 对于加密内容的接口,即接口返回结果完全看不懂是什么东西,可以使用可见即可爬的工具 Appium,也可以使用 Xposed 来 hook 获取渲染结果,也可以通过反编译和改写手机底层来实现破解。
  4. 对于非常规协议,可以使用 Wireshark 来抓取所有协议的包,或者使用 Tcpdump 来进行 TCP 数据包截获。

以上便是爬取流程的相关分类和对应的处理方法。

 

 

 

解析

 

对于解析来说,对于 HTML 类型的页面来说,常用的解析方法其实无非那么几种,正则、XPath、CSS Selector,另外对于某些接口,常见的可能就是 JSON、XML 类型,使用对应的库进行处理即可。

这些规则和解析方法其实写起来是很繁琐的,如果我们要爬上万个网站,如果每个网站都去写对应的规则,那么不就太累了吗?所以智能解析便是一个需求。

智能解析意思就是说,如果能提供一个页面,算法可以自动来提取页面的标题、正文、日期等内容,同时把无用的信息给刨除,例如上图,这是 Safari 中自带的阅读模式自动解析的结果。

 

对于智能解析,下面分为四个方法进行了划分:

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

如果能够容忍一定的错误率,可以使用智能解析来大大节省时间。目前这部分内容我也还在探索中,准确率有待继续提高。

 

 

 

存储

 

存储,即选用合适的存储媒介来存储爬取到的结果,这里还是分为四种存储方式来进行介绍。

  1. 文件,如 JSON、CSV、TXT、图⽚、视频、⾳频等,常用的一些库有 csv、xlwt、json、pandas、pickle、python-docx 等。
  2. 数据库,分为关系型数据库、非关系型数据库,如 MySQL、MongoDB、HBase 等,常用的库有 pymysql、pymssql、redis-py、pymongo、py2neo、thrift。
  3. 搜索引擎,如 Solr、ElasticSearch 等,便于检索和实现⽂本匹配,常用的库有 elasticsearch、pysolr 等。
  4. 云存储,某些媒体文件可以存到如七⽜牛云、又拍云、阿里云、腾讯云、Amazon S3 等,常用的库有 qiniu、upyun、boto、azure-storage、google-cloud-storage 等。

这部分的关键在于和实际业务相结合,看看选用哪种方式更可以应对业务需求。

 

 

 

反爬

 

反爬这部分是个重点,爬虫现在已经越来越难了,非常多的网站已经添加了各种反爬措施,在这里可以分为非浏览器检测、封 IP、验证码、封账号、字体反爬等。

 

下面主要从封 IP、验证码、封账号三个方面来阐述反爬的处理手段。

 

 

反爬 / 封 IP

 

对于封 IP 的情况,可以分为几种情况来处理:

  1. 首先寻找手机站点、App 站点,如果存在此类站点,反爬会相对较弱。
  2. 使用代理,如抓取免费代理、购买付费代理、使用 Tor 代理、Socks 代理等。
  3. 在代理的基础上维护自己的代理池,防止代理浪费,保证实时可用。
  4. 搭建 ADSL 拨号代理,稳定高效。

 

 

反爬 / 验证码

 

验证码分为非常多种,如 普通图形验证码、算术题验证码、滑动验证码、点触验证码、手机验证码、扫二维码 等。

  1. 对于普通图形验证码,如果非常规整且没有变形或干扰,可以使用 OCR 识别,也可以使用机器学习、深度学习来进行模型训练,当然打码平台是最方便的方式。
  2. 对于算术题验证码,推荐直接使用打码平台。
  3. 对于滑动验证码,可以使用破解算法,也可以模拟滑动。后者的关键在于缺口的找寻,可以使用图片比对,也可以写基本的图形识别算法,也可以对接打码平台,也可以使用深度学习训练识别接口。
  4. 对于点触验证码,推荐使用打码平台。
  5. 对于手机验证码,可以使用验证码分发平台,也可以购买专门的收码设备,也可以人工验证。
  6. 对于扫二维码,可以人工扫码,也可以对接打码平台。

 

 

反爬 / 封账号

 

某些网站需要登录才能爬取,但是一个账号登录之后请求过于频繁会被封号,为了避免封号,可以采取如下措施:

  1. 寻找 手机站点 或 App 站点,此种类别通常是接口形式,校验较弱。
  2. 寻找 无登录接口,尽可能寻找⽆无需登录即可爬取的接口。
  3. 维护 Cookies 池,使⽤用批量账号模拟登录,使⽤时随机挑选可用 Cookies 使⽤即可,实现:https://github.com/Python3WebSpider/CookiesPool。

进群:548377875  即可获取大量的PDF!希望大家早日入门!

 

 

 

加速

 

当爬取的数据量非常大时,如何高效快速地进行数据抓取是关键。

常见的措施有 多线程、多进程、异步(协程)、分布式、细节优化等。

 

 

加速 / 多线程、多进程

 

爬虫是网络请求密集型任务,所以使用多进程和多线程可以大大提高抓取效率,如使用 threading、multiprocessing 等。

 

 

加速 / 异步

 

将爬取过程改成非阻塞形式,当有响应式再进行处理,否则在等待时间内可以运行其他任务,如使用 asyncio、aiohttp、Tornado、Twisted、gevent、grequests、pyppeteer、pyspider、Scrapy 等。

 

 

加速 / 分布式

 

分布式的关键在于共享爬取队列,可以使用 celery、huey、rq、rabbitmq、kafka 等来实现任务队列的对接,也可以使用现成的框架 pyspider、Scrapy-Redis、Scrapy-Cluster 等。

 

 

加速 / 优化

 

可以采取某些优化措施来实现爬取的加速,如:

DNS 缓存

使用更快的解析方法

使用更高效的去重方法

模块分离化管控

 

 

加速 / 架构

 

如果搭建了分布式,要实现高效的爬取和管理调度、监控等操作,我们可以使用两种架构来维护我们的爬虫项目。

将 Scrapy 项目打包为 Docker 镜像,使用 K8S 控制调度过程。

将 Scrapy 项目部署到 Scrapyd,使用专用的管理工具如 SpiderKeeper、Gerapy 等管理。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAN 的发展对于研究通用人工智能有什么意义?

作者:Lyken 来源:知乎GAN对于人工智能的意义,可以从它名字的三部分说起:Generative Adversarial Networks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。Networks&#xff1a…

AlldayTest 产品使用--文件

“文件”一栏,可实现新建/打开项目、导入(出)项目、配置信息等功能。 1、新建项目 运行AlldayTest,点击:“文件”-->“新建”,在出现的窗体内输入新创建项目的名称,选择路径保存即可。Allday…

移动端 爬虫工具 与 方法 介绍

From:https://www.cnblogs.com/zyfd/p/9681080.html 本文主要介绍了移动端爬虫的工具与方法,作为一个入门的大纲。没有详细介绍的也给出了本人学习过程中借鉴的资料的链接,适合对移动端爬虫感兴趣的同学入门。 一、抓包模拟 基本原理&#xf…

“芯痛”之下阿里苦心研发NPU AI芯片究竟哪款PU更厉害?

来源:OFweek人工智能网4月19日,有消息称,阿里巴巴达摩院正在研发一款神经网络芯片——Ali-NPU,主要运用于图像视频分析、机器学习等AI推理计算。按照设计,这款芯片性能将是目前市面上主流CPU、GPU架构AI芯片的10倍&…

(转)Windows 批处理实现 定时打开IE 延时一段时间后 关闭IE

要求实现一个定时器:如题 1、首先建立一个bat文件 内容如下: echo offrem 关闭回显命令 cd C:\Program Files\Internet Explorer\rem 改变当前目录到IE所在目录 start iexplore.exe "http://192.168.0.106:29101/LoadMemoryDB?typeMT&commande…

POE API 驱动 OpenAI API 依赖服务

本文主要是介绍了如何利用 POE 提供的 API 服务来驱动原来依赖 OpenAI 的 API 服务 AIGC 的大模型已经火了很久,但是众所周知的原因 OpenAI 的服务订阅对于大陆用户很不友好。而另一个 AIGC 聚合平台 POE 则对大陆用户比较友好,招行的 VISA 和 Master 卡…

深度分析:基站+光通信+手机都用到了哪些美国芯片?有何替代?

来源:21ic电子网摘要:2016年3月8日,美国商务部由于中兴通讯涉嫌违反美国对伊朗的出口管制政策,中兴实行禁运。丨事件:2018年04月16日,美国商务部发布对中兴通讯出口权限禁令,禁止美国企业向其出…

AirtestIDE 教程 — 5分钟上手自动化测试

AirtestIDE 教程 — 5分钟上手自动化测试::http://airtest.netease.com/tutorial/Tutorial.html AirtestIDE 官方文档:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html AirtestProject 官方文档:https://air…

全面超越 Appium,使用 Airtest 超快速开发 App 爬虫

From:https://segmentfault.com/a/1190000017982620 https://www.kingname.info/2019/01/19/use-airtest 在 Airtest 中如何正确使用无线模式控制手机:https://juejin.im/post/5c4f12b0e51d453f45614bbb 使用 python poco 夜神模拟器 进行 自动化测…

Nature:“解构”母爱

来源:生物360一篇论文报告称,小鼠下丘脑视前区相当于一个集成中心,汇集育儿行为相关的大量信息。具体而言,研究人员发现视前区表达甘丙肽的神经元会协调育儿行为的运动、动机、激素和社会因素。相关成果近日 发表 于《自然》。育儿…

重磅!不止是芯片!半导体全产业链分析

来源:杨明辉电子(ID:gh_e6a65dbbbff9)作者:光大电子团队周期性波动向上,市场规模超4000亿美元半导体是电子产品的核心,信息产业的基石。半导体行业因具有下游应用广泛、生产技术工序多、产品种类…

adb(Android debug bridge)命令

From:https://www.cnblogs.com/huanyou/p/5133737.html ADB 用法大全: github 地址:https://github.com/mzlogin/awesome-adb adb 官网链接( 国内想访问,你懂得!!! )&am…

预计2024年全球医疗AI市场超100亿美元

来源:新浪医药摘要:随着人们对这些技术所带来的好处日益了解,AI在医疗领域的应用正越来越广泛,例如药物研发和医学影像学等方面。高昂的初始资本需求和维护维修费用以及AI可能扰乱行业并导致大规模失业的担忧,阻碍了AI…

分享自己写的一个贪吃蛇的游戏(Linux)

作者: dave_cn 发表于 2010-07-18 21:20 原文链接 阅读: 148 评论: 2转载请注明出处。http://www.cnblogs.com/dave_cn/本程序需要ncurses库,ubuntu下安装ncurses可以执行下面命令:sudo apt-get install libncurses5-dev 关于ncurses的用法,读…

Linux 的 diff 命令

读懂 diff:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 菜鸟教程:https://www.runoob.com/linux/linux-comm-diff.html diff 命令详解:https://www.cnblogs.com/wf-linux/p/9488257.htmlhttp://man.linuxde.net/diffhttp…

机器人大潮中暗藏多少伪命题

来源:中国青年报摘要:伴随着巨大的产业浪潮,一种担忧在人群中弥漫,即机器人的“步伐”如此之快,未来究竟会否抢走人类的饭碗,和人类之间爆发一场就业战争,进而夺走人类的一切?2018 R…

哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?

原文来源:arXiv作者:Samuel G. Finlayson、Isaac S. Kohane、Andrew L. Beam「雷克世界」编译:EVA对抗样本的发现引起了人们对深度学习系统的实际部署的关注。在本文中,我们认为,就货币激励和技术脆弱性(mo…

Git 详解 和 廖雪峰 Git 教程

转载:廖雪峰 git 教程:https://www.liaoxuefeng.com/wiki/896043488029600 GitHub 秘籍:https://github.com/tiimgreen/github-cheat-sheet/blob/master/README.zh-cn.md Git Community Book 中文版:http://gitbook.liuhui998.c…

ASP.NET MVC: 构建不带 Web 窗体的 Web 应用程序(转载)

我 从事专业开发迄今为止已有 15 年,在此之前,我利用业余时间从事开发至少也有 10 年了。与我这一代的大多数人一样,我是从 8 位计算机起步,然后转用 PC 平台的。随着计算机的复杂性日益增加,我编写的应用程序涵盖了从…

2018人工智能前沿报告:深度学习的应用和价值

来源: 199IT互联网数据中心摘要:报告重点强调了前沿AI技术的应用范围之广,以及经济潜力之盛,也提到了发展中的一些局限和挑战。报告包含400个应用案例,横跨19个行业的9种业务功能。报告重点强调了前沿AI技术的应用范围…