web scraper 的核心逻辑,请高手指点

2014-08-11 14:12:44 +08:00
 shyrock
我理解就是
1.分析网页
2.分析数据
3.找到连接,跳转到1.

除了第二步的分析数据根据不同应用有区别,
框架部分很简单吧?

完全不懂,说错了请轻拍。
6026 次点击
所在节点    Python
7 条回复
iannil
2014-08-11 14:38:19 +08:00
基本是对的,但一个网页的链接有n多,也就是说你会遇到一个页面开始,然后1*n*n*n这种方式展开的链接个数,同时链接会有重复的,于是如何保存已抓取的链接和如何把满足某些条件的链接筛选出来会是你需要解决的一个新问题。

好了,当你有一个链接处理机制来帮助你管理你抓取的所有链接后,你爬虫的抓取效率变得非常高效,高效到你的爬虫因此被目标网站屏蔽了,你该如何解决?改header头的东西我就不多说了,只说关键的屏蔽ip怎么解决?
你需要将你的爬虫做成分布式,由中央服务器作为任务调度中心,处理抓取的页面,将要抓取的链接分发到各个辖属机器。
辖属机器只做一件事,就是向中央服务器请求任务,并把请求来的任务执行后将结果返回给调度中心。每个辖属机器是一台几十块一年的虚拟机即可,我们要的是辖属机器的ip而已。

好了,现在你由n多个ip分散在n个机器中替你做抓取,数据统一集中在你隐藏在幕后的中央服务器里,效率非常高,一般你控制的好,目标服务器不会发现某个ip请求过于频繁,流量过高,但是事情有可能就是那么变态!目标服务器还是发现了你!把你所有的小爬虫都干掉了!怎么办?

你需要优化调度中心的东西,你的中央服务器不能只简单的把任务平均分给各个辖属机器,你需要实时的监控各个辖属机器的任务数量与执行状态,任务过高的辖属机器得让他歇歇,免得他被干掉,这事为啥不在辖属机器里做呢?因为我们用的是几十块一年的虚拟机啊!!成本啊!!你有钱买几千块一年的机器当我没说啊!!

好了,现在你的任务调度中心很智能的保证每个辖属机器的任务不会过高,如果你嫌效率还是低,再开一个虚拟机就好了。ip也有很多,访问频率和流量你也控制的很好,链接管理也控制的很好,基本上爬虫的框架就有个雏形了。

什么?你只问核心逻辑?那就这些了。
shyrock
2014-08-11 14:46:15 +08:00
@iannil 如此详细认真的回答,受益匪浅,拜谢了。
还有个问题,有没有开源的爬虫框架推荐呢?
iannil
2014-08-11 14:55:34 +08:00
Doubear
2014-08-11 16:34:01 +08:00
@iannil 大神啊、、、、尼玛 V2不适合我这种菜鸟来混额、、、、、
yakczh
2014-08-29 09:04:30 +08:00
核心就是消重,抓取比较简单,一个队列就搞定了
hjkl0001
2015-02-27 10:19:11 +08:00
值得学习
zvDC
2015-02-27 11:52:24 +08:00
学习:抓取链接,分布式处理(具体如何?)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX