V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shyrock
V2EX  ›  Python

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

  •  
  •   shyrock · 2014-08-11 14:12:44 +08:00 · 6173 次点击
    这是一个创建于 3782 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我理解就是
    1.分析网页
    2.分析数据
    3.找到连接,跳转到1.

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

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

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

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

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

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

    什么?你只问核心逻辑?那就这些了。
    shyrock
        2
    shyrock  
    OP
       2014-08-11 14:46:15 +08:00
    @iannil 如此详细认真的回答,受益匪浅,拜谢了。
    还有个问题,有没有开源的爬虫框架推荐呢?
    iannil
        3
    iannil  
       2014-08-11 14:55:34 +08:00   ❤️ 1
    Doubear
        4
    Doubear  
       2014-08-11 16:34:01 +08:00
    @iannil 大神啊、、、、尼玛 V2不适合我这种菜鸟来混额、、、、、
    yakczh
        5
    yakczh  
       2014-08-29 09:04:30 +08:00
    核心就是消重,抓取比较简单,一个队列就搞定了
    hjkl0001
        6
    hjkl0001  
       2015-02-27 10:19:11 +08:00 via iPhone
    值得学习
    zvDC
        7
    zvDC  
       2015-02-27 11:52:24 +08:00
    学习:抓取链接,分布式处理(具体如何?)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1270 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.