摘要:爬虫就是模拟人的访问操作来获取网页/App数据的一种程序。

爬虫是什么?

简单的说爬虫就是模拟人的访问操作来获取网页/App数据的一种程序。我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了。

而我们平时所看到的搜索引擎、统计数据、出行类软件、聚合类平台都离不开网络爬虫。

爬虫的应用领域有哪些?

我们常见的应用场景简单举例如下,

1.搜索引擎抓取网页信息

2.出行类软件通过爬虫抢票

3.论坛或者微博的舆情监控。用数据采集技术来监测搜索引擎、新闻门户、论坛、博客、微博、微信、报刊、视频的舆情。说白了就是用这个来实现实时的发现某一行业或地区的热点事件,譬如清博舆情,百度舆情等等。

4.比价网站的应用。如今各大电商平台为了活跃用户进行各种秒杀活动,还有优惠券等,同样的一个商品可能在不同网购平台价格不一样,这就催生了返利网,折多多,折xx等。那么这些网站是如何在几分钟之内甚至秒级的时间内知道一件商品在某站有优惠的呢?这就需要一个数据采集系统(爬虫)来实时监控各站的价格浮动,先采商品的价格、型号、配置等,在做处理、分析、反馈。

为什么学习爬虫?

互联网的快速发展,带来了前所未有的便利,同样也带来很多之前没有遇到的新问题。获取信息的成本越来越低,信息的种类和数量越来越多,但是我们处理信息的能力并没有提升,很难从信息中提取自己感兴趣的内容。

而学会爬虫就可以自动高效的获取互联网中我们感兴趣的内容,帮助我们快速搭建属于自己的信息知识库。

如何完成一个轻量级爬虫

这里简要概述为三个步骤:获取数据 - 解析数据 - 存储数据。以下是完成这些步骤所涉及的工具,供大家参考。

获取数据:urllib2、Requests、Selenium、aiohttp

获取数据的工具:Chrome、Fiddler、MitmProxy、Appium

解析数据:Css 选择器、PyQuery、BeautifulSoup、Xpath、Re

存储数据:MySQL、MongoDB、Redis

工程化爬虫

工程化爬虫的项目推荐:Scrapy、PySpider

官方文档:https://docs.scrapy.org/en/latest/、http://docs.pyspider.org/en/latest/

Github 地址:https://github.com/scrapy/scrapy、https://github.com/binux/pyspider

反爬虫的措施与应对

1.网页反爬虫—字体反爬

开发者可以使用 @font-face 为网页指定字体,就可以调用自定义的字体文件来渲染网页中的文字,网页中的文字变成相应的编码,这时通过简单的网页采集就无法获取编码后的网页内容。

应对措施:字体反爬相对与其他的反爬,他的难度属于较为初级的阶段,主要是在处理的时候比较麻烦,比较注重防御的网站,往往一个网站有多套不同的字体加密防御体系,比如 135 用 A 方案,246 用 B 方案,这个需要一定的耐心去分析字体的规律并使用 Python 解析字体文件,找出映射规律才可以解决。

推荐工具:fontTools、百度字体编辑器(http://fontstore.baidu.com/static/editor/index.html)

2.网页反爬虫—验证码

验证码是一种区分用户是计算机还是人的公共全自动程序,常见的验证码有:多位英数混合验证码、滑动验证码、点选验证码、旋转验证码等等。

应对措施:项目预算充足的情况下可以对接专业的打码平台,减少 90 % 的工作量;预算不足的情况可以使用华为云 ModelArts,不用写一行代码,就能完成模型的搭建

推荐工具:华为云 ModelArts、CC框架

3.网页反爬虫—JS 加密/混淆

前端的代码都是公开的,那么加密有意义吗?有的,通过去除代码中尽可能多的有意义的信息,比如注释、换行、空格、代码负号、变量重命名、属性重命名(允许的情况下)、无用代码的移除尽可能增加爬虫工程师阅读代码的成本。

应对措施:轻中度混淆或者混淆的代码,可以通过阅读混淆后的代码,梳理加密逻辑后扣取可运行的 Js 代码,使用 Python 库调用完成加密参数的生成;重度混淆使用 AST 语法树还原混淆的代码,去除无意义的垃圾代码,还原清晰的加密逻辑后使用 Python 库调用完成加密参数的生成。

推荐工具:AST、PyExecJS

4.APP 反爬虫

都2020年了,目前通过应用市场下载的 APP还有不加壳的吗?除了加壳防护外,常见的 APP 也应用了单向或双向证书验证,简单的中间人攻击已经无法抓到 APP 的数据包,学习 APP 逆向已经势在必行。

应对措施:APP 逆向需要学习的内容非常多,这里只针对无法抓到 APP 包做简单的总结(推荐工具:Frida、Xposed、IDA、jadx、Charles):

【单向认证和双向认证】

单向验证的情况是客户端校验证书,校验出错就无法访问

双向认证的情况是客户端校验证书的时候,服务端也要校验证书,有一端证书校验失败都无法访问数据。缺点是服务器的压力比较大

处理方法:一般是使用 JustTrustMe,原理是通过 Xpose Hook 校验的 API。

【APP不走代理—如何确定 APP 不走代理?】

(1)关闭代理服务器(fiddler等代理抓包工具)(2)使用手机访问浏览器网页访问失败,确定代理失效(3)使用APP访问,正常访问确定 APP 不走代理访问网络

处理方法:更换不基于代理类型的抓包工具(HTTP Analyzer V7--缺点没办法用在真机、HTTP Debug Pro、手机端的HttpCanary-基于VPN);hook-先反编译看看他是使用了那个框架,然后针对性的hook-菜鸡劝退;iptables 强制拦截转发

【代理检测的APP】

挂上代理之前APP访问正常,挂上代理之后APP无法使用显示网络出错等情况

(1)代理检测(hook 代理检测的方法)(2)证书检测(用 JustTrustMe )

【双向认证的APP】

双向认证的情况是客户端校验证书的时候,服务端也要校验证书,有一端证书校验失败都无法访问数据。

不过在双向认证的APP中要做到双向验证,在APP中一般要配置好服务器端验证的证书,所以在客户端中我们可以找到一个服务端的证书,我们只要在 Fiddler 中配置好这个证书就可以请求了。

ps:证书一般带有密码,需要反编译找到密码,之后导入至系统当中,再从系统中导出为 .cer 证书格式,之后在 FiddlerScript 中配置即可。

分布式爬虫都是什么?

如果你已经学习了如何编写工程化爬虫,并对它有一定的心得,那么你已经开始对爬虫架构有一定的心得了。

而分布式爬虫看着概念吓人,其实往简单的看就是将单机的爬虫分布到多台机器,主要的重点在于消息阻塞处理,日志告警、数据完整性校验等等问题。

针对亿级以下的舆情数据,可以试着学习 Scrapy + Redis + MQ + Celery 这样的组合,足以应对。

如果是针对垂直领域的数据抓取,可以将重心放在如果快而稳的获取数据上,毕竟垂直领域的数据抓取,爬虫与反爬虫的对抗是最激烈的。

学习资源推荐

崔庆才:《Python3 网络爬虫开发实战》

韦世东:《Python3 反爬虫原理与绕过实战》、《Python3 网络爬虫宝典 》

爬虫相关的公众号:NightTeam、咸鱼学Python、进击的Coder、菜鸟学Python编程、妄为写代码

学Python,请上华为云学院!

华为云学院是华为云官方云计算技术培训学习平台,作为云时代下的创新开发者人才学院,华为云学院打造了架构完整、内容丰富、形式多样的“学、练、考、证”一站式学习与体验平台。用户可通过在线课程进行学习,在沙箱实验室进行练习,考试后获取官方认证证书,掌握最新培训服务资讯,促进综合技能提升。

华为云1024程序员节,向云而生

直播盛典:邀请华为云云原生开源负责人、华为云DevCloud首席技术布道师等10+大咖现身,剖析云原生的行业趋势,倾授云原生实战秘籍。点击观看直播。

干货直通车:大佬级别专家手把手教学,经验和技术分享必不可少,还有在线互动答疑,带你揭晓大厂最深层代码技术,点击查看各技术会场,挖掘更多干货!

本文根据【咸鱼学Python】公众号号主戴煌金在“华为云1024程序员节”技术分论坛的直播内容整理而成,感兴趣的开发者们可点击回看直播。

点击关注,第一时间了解华为云新鲜技术~

爬虫“学前班”,记住这些不踩坑!相关推荐

  1. Python 爬虫“学前班”!学会免踩坑!

    作者 | 喵叔 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 爬虫应用的广泛,例如搜索引擎.采集数据.广告过滤.数据分析等.当我们对少数网站内容进行爬取时写多个爬虫还是有可能的,但是 ...

  2. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

  3. Python爬虫-爬取福利图片踩坑

    欢迎大家访问我的个人博客:https://jmbaozi.top/ 这个个人博客是我无意中发现的,经过Ping测试服务器应该是在海外,所以传输速度并不理想,为了减轻博主服务器的压力,在本文中进行脱敏处 ...

  4. macOS安装Scrapy,不要踩坑了

    文章目录 安装Scrapy 1.使用Anaconda或Miniconda 2.推荐使用虚拟环境安装 3.特定平台安装说明 3.1 Windows 3.2 macOS 4.测试你的第一个Scrapy项目 ...

  5. python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...

    初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...

  6. 轻量应用服务器MySQL远程连接踩坑

    不算是给阿里云打广告吧,因为被阿里云的"云服务器ECS" 和 "轻量应用服务器"搞的很蛋疼.很多年前,阿里云的学生机"云翼计划"默认就只有& ...

  7. cannot resolve symbol r_64位ret2_dl_runtime_resolve模版题以及踩坑记录

    什么是ret2dl攻击 当程序在第一次加载某个函数的时候,got表中对应的表项还没有写入真实的地址(因为是第一次调用),所以这个时候就需要调用_dl_runtime_resolve函数将真实的地址写入 ...

  8. linux python wps doc 转 txt_耗时一周尝试踩坑,整理了一些Python实用知识点

    很零碎的知识点,有的是踩过的坑,不成系统,但是绝对很有用,知道的可以回顾下,不太了解的可以多学习下 1.Python连接MySQL加编码 记得加charset,没加的话部署Linux服务器运行可能有中 ...

  9. vue.js踩坑之单向数据流

    vue.js父子组件之间的数据通信,细节总结 隐性规则:单行数据流 学前疑问: 1.父组件如何向子组件通信数据? 2.父组件可以直接修改子组件的数据!但是反过来绝对不可以!那怎么解决这个问题呢? 3. ...

最新文章

  1. php虚拟键盘输入,[问题] bash下如何模拟键盘输入
  2. .net core引用错误的Entity Framework而导致不能正常迁移数据的解决办法
  3. authconfig命令解析_学习笔记
  4. python入门练习题3(函数)
  5. matlab模式识别实验二,模式识别实验二
  6. 洛谷P1182 数列分段 Section II(二分+贪心)
  7. keras实例学习-双向LSTM进行imdb情感分类
  8. Visual Studio2013配置安装Opencv2.4.9详细过程
  9. Kejin Game UVALive - 7264 (最大流转最小割)
  10. 一、宿主机Linux系统的基本环境设置
  11. 给机械硬盘加个缓存:PrimoCache
  12. 2. Windows编程基础
  13. 一些特殊区域的全纯自同构群
  14. Macbook查看隐藏文件
  15. Java EE 7 Hands-on Lab,CDI deployment failure:WELD-000072,解决办法
  16. Hdu 1496 Equations(巧妙哈希)
  17. kodi+java版_Emby+KODI--完美的NAS多媒体方案
  18. canvas制作钟表
  19. 云服务器上搭建个人云笔记——leanote
  20. Java基础(17)——字节流、字符流

热门文章

  1. 【算法】几分钟时间让你彻底学会—时间复杂度
  2. Docker+NETCore系列文章(三、Docker常用命令)
  3. Java递归实现多级菜单
  4. 关于等级保护(等保2.0)安全解决方案
  5. 华为 linux 重启命令,华为服务器重启管理口
  6. 招商银行、伊利股份套利模型(1)
  7. 计算机网络是如何通信的「三」DNS
  8. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)下
  9. Service 定义(startService、bindService、IntentService)
  10. 关于电商秒杀系统中防超卖处理方案简述,统统给你解决!