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

scrapy 使用什么方式管理任务队列,如何指定域名进行定时清除? [V 币感谢]

  •  
  •   akmonde · 2018-11-28 21:49:14 +08:00 · 2501 次点击
    这是一个创建于 2171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,我想知道基础 scrapy 是如何管理队列的,我大致猜测是根据自带的队列池,并不依赖任何中间件。

    我的需求是:

    一旦达到特定条件,清除指定域名的队列,不再爬含有该域名的 url。
    比如达到某个访问频次,就根据域名去清除该域名的所有爬行请求,但不影响爬行队列里已经存在的含有其他域名的 url。
    

    我这边现在的情况是,根据文本 txt,喂给 scrapy 一部分 url,其中包含多个域名。

    由于一些特殊情况,不是很方便用 redis 挨个 push url,好像这个也不太好根据域名去清除 url 队列,不过实在要用也请大家给个方案。

    第 1 条附言  ·  2018-11-29 21:15:28 +08:00
    另外,我自己在触发时,手动修改 self.allowed_domains。
    经过后续的多次打印,发现 self.allowed_domains 已经移除了该域名( self.allowed_domains 此时不为空),scrapy 结果还是在继续爬,压根没有停的意思。
    很僵硬,有没有大佬有新点子。
    4 条回复    2018-11-29 12:40:56 +08:00
    WilliamYang
        1
    WilliamYang  
       2018-11-29 10:04:27 +08:00
    你可以写个 Downloader Middleware, 然后在处理 request 时根据你的条件判断, 如果不满足就抛弃
    WaJueJiPrince
        2
    WaJueJiPrince  
       2018-11-29 11:34:56 +08:00
    Scrapy-Redis 有个功能是动态切换域名,不知道是不是你想要的。
    akmonde
        3
    akmonde  
    OP
       2018-11-29 12:02:52 +08:00
    @WilliamYang 中间件不满足抛弃的话,我那边也做了,但还是在爬触发了我条件的网站,不会停下对该域名的爬行的。
    akmonde
        4
    akmonde  
    OP
       2018-11-29 12:40:56 +08:00
    @WaJueJiPrince 不知道您说的是不是这个:
    ```
    #动态域范围的获取
    def __init__(self, *args, **kwargs):
    # Dynamically define the allowed domains list.
    domain = kwargs.pop('domain', '')
    self.allowed_domains = filter(None, domain.split(','))
    super(MySpider, self).__init__(*args, **kwargs)
    ```
    我这边需要是的是条件触发清除指定域名的队列,好像跟这个不太符合。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3684 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.