• 关于 Scrapy 中自定义 Spider 传递参数问题


    实际应用中,我们有可能在启动 Scrapy 的时候自定义一些参数来控制不同的业务流程,Google 尝试了如下方式可以实现 。

    修改 Spider 构造函数 

    class myspider(Spider):
    
        # 爬虫名称
        name = "myspider"
    
        # 构造函数
        def __init__(self, tp=None, *args, **kwargs):
            super(myspider, self).__init__(*args, **kwargs)
            # scrapyd 控制 spider 的时候,可以向 schedule.json 发送 -d 选项加入参数
            self.tp = tp
    
        # 开始地址 (与 start_requests 不能同时设置)
        # start_urls = ['https://www.google.com']
    
        # 定义请求的URL
        def start_requests(self):
            if self.tp == 'tp_news_spider':
                yield self.make_requests_from_url(news_url)
            else:
                urls = []

    命令行启动

    scrapy crawl myspider -a tp=tp_news_spider
    使用 Scrapyd 管理 Spider
    可以向 schedule.json 发送 -d 选项加入参数
    curl http://localhost:6800/schedule.json -d project=myproject -d spider=myspider -d setting=DOWNLOAD_DELAY=2 -d tp=tp_news_spider

    Cron 控制

    public async Task SchedulePollingTaskBackgroundJobAsync()
            {
                try
                {
                    var response = await @"http://172.0.0.1:8080/schedule.json"
                                          .WithBasicAuth("user", "pwd")
                                          .PostUrlEncodedAsync(new { project = "myproject", spider = "myspider", tp = "tp_news_spider" })
                                          .ReceiveString();
                }
                catch (Exception ex)
                {
    
                }
            }
    
       //http://www.bejson.com/othertools/cronvalidate/
       RecurringJob.AddOrUpdate(() => SchedulePollingTaskBackgroundJobAsync(), @"0/15 * * * * ?", TZConvert.GetTimeZoneInfo("Asia/Shanghai"));

    REFER:
    https://blog.csdn.net/Q_AN1314/article/details/50748700

  • 相关阅读:
    053335
    053334
    053333
    053332
    053331
    053330
    053329
    053328
    053327
    053326
  • 原文地址:https://www.cnblogs.com/Irving/p/11096486.html
Copyright © 2020-2023  润新知