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代码文件即可

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

  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/6840772.html
Copyright © 2011-2022 走看看