实际应用中, 我们有可能在启动 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:
来源: http://www.bubuko.com/infodetail-3105405.html