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
yinzishao
V2EX  ›  Python

有关分布式爬虫和 scrapy-redis 的问题,去重策略和怎么爬取整个网站?

  •  
  •   yinzishao · 2016-03-08 22:26:36 +08:00 · 7189 次点击
    这是一个创建于 3176 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从首页里的链接一层一层爬取整个网站的页面。
    那如何停止的?(判断把整个网站爬取完的条件是什么?)

    scrapy-redis 的疑问:
    去重问题:
    dupefilter.py 里面的源码:
    def request_seen(self, request):
    fp = request_fingerprint(request)
    added = self.server.sadd(self.key, fp)
    return not added

    去重是把 request 的 fingerprint 存在 redis 上,来实现的吧?那大规模抓取不就很耗费内存?每条没读过的链接都存。
    有没有人试过用 bloomfilter 结合 scrapy — redis 来去重。有没有必要?
    9 条回复    2016-03-10 19:53:11 +08:00
    yinzishao
        1
    yinzishao  
    OP
       2016-03-08 22:34:03 +08:00
    求各位意见,或者分享下应该怎么分布式爬虫,万分感谢!
    binux
        2
    binux  
       2016-03-08 22:50:51 +08:00
    我们假设 fingerprint 是 MD5 串, 256bit, 一亿条 url 也就 3.2G
    一亿链接先想想你其他的组件是否撑得住再考虑费不费内存这个问题吧。
    zts1993
        3
    zts1993  
       2016-03-08 23:46:12 +08:00
    url 取 md5 内存占用不了多少,如果再用 64 进制表示,还可以节省 23%的样子

    建议对 fingerprint 做一次硬分片散列到多个 redis set 中,这样以后 redis 扩展成集群就比较方便了 :)

    bloomfilter 感觉最大得问题是不知道怎么预估未来得规模啊。

    不过话说 redis 未来会支持 bloomfilter 。。现在 bloomfilter 怎么和 redis 结合?

    毕设得时候做得爬虫看的一个人写的,,那个停止条件是 set 里面元素为 0 。。非常不科学,有时候网络一抖动 set 里面为 0 ,还有任务在处理,爬虫就直接 exit 了,简直捉急,不过我看 scrapy-redis 里面好像不是这样。。。。。

    我觉得要是我做的话。。还是 set 是否为 0 吧,不过得加点等待时间判断一下就好了。。
    jadetang
        4
    jadetang  
       2016-03-09 11:05:20 +08:00 via Android
    把爬虫的 agent 和 Server 分开,用 Server 来去重。
    yinzishao
        5
    yinzishao  
    OP
       2016-03-09 16:12:25 +08:00
    @zts1993 set 里面的元素为 0 ,感觉很不靠谱的样子。或者设定爬取的宽度或者深度为终止条件?
    yinzishao
        6
    yinzishao  
    OP
       2016-03-09 16:12:55 +08:00
    @binux 感谢指出
    zts1993
        7
    zts1993  
       2016-03-09 16:17:07 +08:00
    @yinzishao 是非常不靠谱。。。。具体什么为终止应该还是看需求啊,我之前做的是学校网站爬虫,按照 ip 和域名限定,反正 url 总数是一定的~
    yinzishao
        8
    yinzishao  
    OP
       2016-03-09 16:27:28 +08:00
    @zts1993 也就是估计大概的爬取量
    yinzishao
        9
    yinzishao  
    OP
       2016-03-10 19:53:11 +08:00
    @jadetang 什么意思?是指 master 和 slave 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3243 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.