【问题标题】:How can I schedule scrapy spider to crawl after certain time?如何安排scrapy spider在特定时间后爬行?
【发布时间】:2016-06-19 05:18:29
【问题描述】:

我想安排我的蜘蛛在爬行完成后的 1 小时内再次运行。在我的代码中,spider_closed 方法在抓取结束后调用。现在如何通过这种方法再次运行蜘蛛。或者是否有任何可用的设置来安排scrapy spider。

这是我的基本蜘蛛代码。

import scrapy
import codecs
from a2i.items import A2iItem
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.conf import settings
from scrapy.crawler import CrawlerProcess
from scrapy import signals
from scrapy.utils.project import get_project_settings
from scrapy.xlib.pydispatch import dispatcher


class A2iSpider(scrapy.Spider):
    name = "notice"
    f = open("urls.txt")
    start_urls = [url.strip() for url in f.readlines()]
    f.close()
    allowed_domains = ["prothom-alo.com"]

    def __init__(self):
        dispatcher.connect(self.spider_closed, signals.spider_closed)

    def parse(self, response):

        for href in response.css("a::attr('href')"):
            url = response.urljoin(href.extract())
            print "*"*70
            print url
            print "\n\n"
            yield scrapy.Request(url, callback=self.parse_page,meta={'depth':2,'url' : url})


    def parse_page(self, response):
        filename = "response.txt"
        depth = response.meta['depth']

        with open(filename, 'a') as f:
            f.write(str(depth))
            f.write("\n")
            f.write(response.meta['url'])
            f.write("\n")

        for href in response.css("a::attr('href')"):
            url = response.urljoin(href.extract())
            yield scrapy.Request(url, callback=self.parse_page,meta={'depth':depth+1,'url' : url})


    def spider_closed(self, spider):
        print "$"*2000

【问题讨论】:

    标签: scrapy scrapy-spider


    【解决方案1】:

    您可以使用cron

    crontab -e 以 root 身份创建计划和运行脚本,或者 crontab -u [user] -e 以特定用户身份运行。

    您可以在底部添加 0 * * * * cd /path/to/your/scrapy && scrapy crawl [yourScrapy] >> /path/to/log/scrapy_log.log

    0 * * * * 使脚本每小时运行一次,相信您可以在网上找到有关设置的更多详细信息。

    【讨论】:

      【解决方案2】:

      您可以使用 JOBDIR 设置运行您的蜘蛛,它将保存您在调度程序中加载的请求

      scrapy crawl somespider -s JOBDIR=crawls/somespider-1
      

      https://doc.scrapy.org/en/latest/topics/jobs.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        相关资源
        最近更新 更多