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

爬虫是什么?

简单的说爬虫就是模拟人的访问操作来获取网页/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 这样的组合,足以应对。

如果是针对垂直领域的数据抓取,可以将重心放在如果快而稳的获取数据上,毕竟垂直领域的数据抓取,爬虫与反爬虫的对抗是最激烈的。如果你对Python感兴趣,欢迎加入我们【python学习交流裙】,免费领取学习资料和源码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 大师兄的Python学习笔记(二十七): 爬虫(八)大师兄的Python学习笔记(二十九): 爬虫(十) 十、Py...
    superkmi阅读 989评论 0 4
  • ├─day1 │ 1爬虫的基本概念 │ 2Fiddler简介 │ 3网页信息简介 │ 4读取网页三种方法 ...
    飞雪雪团队阅读 4,388评论 1 5
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,395评论 16 21
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,498评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,681评论 1 1