zoukankan      html  css  js  c++  java
  • 爬淘宝的商品信息下 (下) -- 实现定时任务爬取

    爬淘宝的商品信息下 (下) -- 实现定时任务爬取

    上回我们讲到用scrapy爬取淘宝的商品信息, 今天的任务是实现爬虫的周期作业功能。商品信息的交易量评论数,等等,会处在变动之中,因此需要爬虫能够在每天预设的时间爬取网页。

    假设,我们现在的任务是,要爬虫在凌晨3点,也就是 每天的凌晨3:00,(对,就是那个月黑风高,四下无人的夜晚,悄悄的,爬虫它来了,然后悄悄地又走了,)进行一次爬取任务。

    main.py就是我们要写的文件,话说,scrapy爬虫,不一定非得要用scrapy命令才能去调用,我们可以直接从脚本中调用,嗯,很好,狠喜欢。

    整个scrapy项目的结构如下所示,看到main.py了吗?没错,直接放在根目录下就可以了,妥妥的,就是这么简单

    D:CodeTB>tree /f
    文件夹 PATH 列表
    卷序列号为 0000007D E659:980C
    D:.
    │  main.py
    │  scrapy.cfg
    │
    ├─.idea
    │  │  misc.xml
    │  │  modules.xml
    │  │  TB.iml
    │  │  workspace.xml
    │  │
    │  └─inspectionProfiles
    │          profiles_settings.xml
    │
    ├─results
    │      result.2017-05-11.csv
    │
    └─TB
        │  items.py
        │  middlewares.py
        │  pipelines.py
        │  settings.py
        │  __init__.py
        │
        ├─spiders
        │  │  taobao.py
        │  │  __init__.py
        │  │
        │  └─__pycache__
        │          taobao.cpython-36.pyc
        │          __init__.cpython-36.pyc
        │
        └─__pycache__
                items.cpython-36.pyc
                pipelines.cpython-36.pyc
                settings.cpython-36.pyc
                __init__.cpython-36.pyc
    

    下面直接上mian.py的代码,废话不多说

    from scrapy.utils.project import get_project_settings
    from scrapy.crawler import CrawlerRunner
    from scrapy.utils.log import configure_logging
    from twisted.internet import reactor
    from apscheduler.schedulers.background import BlockingScheduler
    
    import multiprocessing
    
    scheduler = BlockingScheduler()
    
    
    def release_spiders():
        configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
        settings = get_project_settings()
        runner = CrawlerRunner(settings)
        for spider in runner.spider_loader.list():
            runner.crawl(spider)
        d = runner.join()
        d.addBoth(lambda _: reactor.stop())
        reactor.run()
    
    
    @scheduler.scheduled_job('cron', hour=3, minute=0, id="daily_crawl")
    def run():
        process = multiprocessing.Process(target=release_spiders)
        process.start()
    
    
    if __name__ == "__main__":
        scheduler.start()
    
    

    除了scrapy以外,还用到了多进程multiprocess包,定时任务调度apscheduler包,貌似前一个包,默认就有,而后面一个,要自己安装的。。。。

    为什么要开启多进程。。。。?你以为我想啊,折腾了好久,发现如果不开多进程的话,webdriver不会自动关闭,而且,pipline中的数据存储也不工作,神烦啦!。。。。。。。所以,还是再开个进程,让定时任务和爬取任务分开,各玩各的!

    @scheduler.scheduled_job('cron', hour=3, minute=0, id="daily_crawl") 这个地方就是设置定时任务的执行时间点,24小时制,所以,会在每日的凌晨3点0分,进行一次爬取任务,半夜人少,网速快,偷偷地,刺激,没毛病。

    好了,就这样了,具体代码,已经上传到github了,下载地址https://github.com/Levstyle/TaobaoSpider, 只要执行main.py代码文件即可

    如果有毛病,请直接跟俺说啊,反正我也不会改的

  • 相关阅读:
    技巧:在Silverlight中如何访问外部xap文件中UserControl
    Silverlight:代码隐藏和分部类
    silverlight 反射调用WebService
    [推荐]Silverlight 2 开发者海报
    轻松建立Silverlight开发环境
    windows 卸载IE8还原IE7的方法
    如何:访问双工服务
    技巧:在Silverlight 2应用程序中切换用户控件
    如何减少silverlight XAP包的尺寸
    Silverlight:应用程序和编程模型
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/6840772.html
Copyright © 2011-2022 走看看