当前位置: 首页 > 原理解释

scrapy爬虫原理-Scrapy 爬虫核心原理

scrapy 如何把网页嚼碎了再吃? 别被标题里的“原理”两个字唬住了,打开电脑,在浏览器里点个“网络”,那种连路都看不见的感觉,恰恰就是爬虫最真的状态。 你想过没,浏览器打开一个网站,实际上是在跟它玩一种叫“轮询”的游戏。你随意敲个地址,浏览器会不停地傻乎乎地刷新,直到收到那个网站的响应,然后把你刚刚敲的网址从“待请求”列里划掉,变成“已访问”。但这跟爬虫彻底是两码事。爬虫是瞎了眼的,它根本不会去检查那个网址是不是还活着,是不是还在跑分,是不是有个亲爹让它变出来的。它一上来就拿起键盘,对着那个地址狂敲。 第一次敲,浏览器说“重复了,别给死”,便爬虫说“那我先不敲了”。 但这玩意儿真就真得如此怂?不是,它心里有数。
要是它看到那个网址直接还在,它就当作:“哎哟,这玩意儿想把我拦回去,我得先试探一下。我要是敲进去,它会不会给我‘好看’(200 OK)?会不会给我‘哭’(304 Not Modified)?” 这就好比你想进你家,你敲门。门打开,里面人挺凶,你赶紧走。下次你再敲门,门还是那扇门,人还是那个人。
这时候,门框上就会挂个牌子:“不准靠近”。
这时候你才后知后觉,原来这牌子是你自己挂上去的。 好的,假设我们遇到了个脾气挺好的老板,他给你开了门,还端来了满桌的饭菜(200 OK)。
这时候爬虫的心态就启动变了。它不再是那个怂包,它这时候就要启动琢磨:这老板是不是想跟我玩个“自证清白”的游戏?它这招叫“延迟探测”。 它不会直接吃,它会先在那儿傻乎乎地在那儿敲,比如每隔一秒敲一次,要么每五分钟敲一次。
有时候连敲三次,只要没门,它就持续敲;要是门开了,它就启动用“延迟”来试探那门是不是确实开了。
这种试探,就是在网页上蹦跶,是爬虫最标配的“刷存有感”行为。 但这还不是最核心的。真正的核心在于那个“抓取”动作。 爬虫要进食,得有个“勺子”。浏览器给它的勺子是 HTTP 接口,但爬虫把这个接口装在了肩膀上。当你敲那个网址时,浏览器实际上是在说:“喂,小把戏,这次你给啥?”这时候,爬虫就接话茬了:“嘿,我有你。你给啥?” 浏览器回答:“给网页。” 这时候,爬虫就卡住了。它手里有那个网页,但眼前没有那个“勺子”。它得自己造那个勺子。它得打开浏览器,把那个网址填进去,自己在浏览器里等个响应。
这时候,它就在自己的脑子里,要么在代码的内存区域,把那个网页硬生生的抠出来。 这个过程,就是著名的“Coordinate Extraction”。它不是好办地复制粘贴。它得把网页里的图片、视频、动态脚本,还有那些乱七八糟的广告,统统都抠出来。 这时候,爬虫就特别费脑子。它得跟网页里的各种“身份”打交道。
比方说,那个网页里有个广告,它不认识广告。它得先看看广告的主页面是不是也是它喜爱的,要么广告的主页面是不是个真家伙。
要是主页面是老局,那这个广告就是假的了,爬虫得赶紧踢掉,别浪费力气。 再比如,网页里有视频。视频是个动态的,它得连上视频服务器。
这时候,爬虫就得搞个“备用方案”。
要是连上视频服务器被踢了,要么视频服务器没响应,它如何办?它就得自己在那儿乱敲,把自己当成视频服务器,去请求视频服务器发视频。
这时候,它就得硬着头皮去查库,看看那个视频是不是这个网站自己的,要么是不是别人发的。
要是别人发的,它就得去跟那个网站交涉,说:“嘿,这视频不是我出的,你把它给我吧。” 这就把爬虫的复杂度搞上去了。它不仅要抓网页,还要抓网页里的图、抓视频、抓动态、抓非结构化数据。它得把这些乱七八糟的东西,一个个分类,一个一个清洗。 图片更是费事。网页里的图片可能是压缩过的,可能是那种带透明度的,就连可能是那种加载挺慢的图片。爬虫得用正则表达式去抠,先捞出一张图,再分析这张图是不是确实。
要是分析出来这张图实际上是导航栏放上去的,要么实际上是广告,它就得把它扔进垃圾桶。 这时候,爬虫就启动像个三教九流的大千世界里的小混混,它得在无数个角落到处转悠,看哪个地方有宝贝。它得用各种算法,比如哈希值匹配、指纹识别、相似度比对,把那些看起来像广告、像导航、像标题的页面,给挑出来,把它们给删掉,只留下真正的核心内容。 在这个过程中,爬虫还得跟数据库打交道。它得把抓出来的数据,一个个传进去,存进那个庞大的数据仓库里。
这时候,爬虫就真正变成了仓库管理员。它得把数据整理好,分类好,按工夫排序,按内容类型整理。 它得知道,这些数据是干嘛用的。是为了做分析?是为了做排名?还是为了做用户画像?它得搞清楚,手里这张图,能告诉用户啥?这张新闻,能告诉用户啥? 这时候,爬虫就启动像个数据分析师了。它得把那些乱七八糟的数据,清洗出来,变成机器能听懂的语言。
比方说,把那个带 HTML 标签的图,给删掉,把里面的内容挖出来,变成纯文本。把那些带元数据的数据,整理成结构化的格式,撇脱后续的人去读。 最终,它把处理好的数据,打包好,传回给那个主程序。主程序收到数据后,就能够启动干活了。
比方说,给用户发个报告,给用户画个饼,给用户算个分。 回过头再看,那个浏览器,它就像是一个瞎眼的镜子。它只能反射用户看到的东西,它不知道里面有啥。爬虫,就是那个拿着放大镜,透过镜子,把里面的东西硬生生挖出来的人。它不关心镜子是不是干净利落,它只关心用户看到的那片天,是不是想看到。 故此,当你看到那个网页,那个网页里满是图、满是视频、满是动态脚本。
那是爬虫吃下的大餐。它吃下了所有你能想到的东西,然后把它嚼碎了,再咀嚼碎了,再嚼碎,最终再嚼碎,塞进你的脑子里。 这就叫“蜘蛛网”。它不是网,是网里的人把整个蜘蛛网织在自己身上。它把网上的每一根线,每一朵花,每一片叶子,都抓回来了。它知道,有时候抓回来的花是假的,有时候抓回来的叶子是假的。但它知道,用户看到的那片天,是真的。 故此,爬虫的原理,实际上就是人类最原始、最本能的一种抓取行为。它不追求完美,它追求速度;它不追求准,它追求覆盖。它是互联网里一个最不起眼,却又最强大的存有。它把互联网的每一个角落,都拉进了自己的数据池。 下次你再打开浏览器,看到那个网址,心里想的可能是“这玩意儿如何还没变出来”。
实际上,它早就在那儿动脑子了。它在等,它在敲,它在分析,它在期待。 当你下次再看那个网址,发现它确实变出来了,你会发现,那个网址背后,藏着一个庞大的、正在疯狂工作的、不知疲倦的、就连有点疯狂的“数据猎手”。 它不就寝,不进食,只吃数据。它把数据当成最高尚的食物,当成最珍贵的宝藏。
只要网页还在变,它就在变,它就在抓,它就在吃。 这就是 scrapy 的底层逻辑,也是互联网世界最真的写照。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站