我有一个完整的功能蜘蛛代码,它接受一个参数date
。这将在蜘蛛的每次迭代中发生变化。
为了测试purpouse,我创建了一个执行以下操作的shell脚本。
.date
,其格式为YYYY-MM-DD
脚本读取文件并将日期传递给蜘蛛。lastDate=$(cat .dailyScrapeDate)
echo "Last scraped Date : $lastDate"
nextDate=$(date -d "$lastDate -1 day" "+%Y-%m-%d")
echo "Next scraped Date : $nextDate"
echo "Launching Spider"
scrapy crawl dailyDataSpider -a date=$nextDate
echo "Writing scraped date ($nextDate) to dot file .dailyScrapeDate"
echo "$nextDate" > .dailyScrapeDate
现在我需要将其移至爬虫程序。那我该怎么办?我是否需要创建一个独立的python文件并运行它?例如,我创建了一个文件process.py
from DailyDataSpider import DailyDataSpider
from scrapy.crawler import CrawlerProcess
process = CrawlerProcess()
process.crawl( DailyDataSpider, date=date ) # TODO: Read and pass date
process.start()
# Save date?
参数date = date已经通过,但是我对此后如何前进感到有点困惑。我是否在python文件上读写点文件?这个文件代码是在每次迭代时运行还是废弃只接受一次参数并与之一起运行?
问题:如何以动态(变量)参数递归运行蜘蛛?
答案 0 :(得分:2)
这个脚本没问题
from DailyDataSpider import DailyDataSpider
from scrapy.crawler import CrawlerProcess
process = CrawlerProcess()
process.crawl( DailyDataSpider, date=date ) # TODO: Read and pass date
process.start()
现在在您的蜘蛛文件中执行此操作
from scrapy.spiders import CrawlSpider
class DailyDataSpider (CrawlSpider):
def __init__(self, date=None):
if date:
self.date = date
现在可以在蜘蛛的任何位置访问self.date
。
并且您可以访问date
或pipeline
中的middleware
spider.date
init ()中提供了默认值,以防止错误,如果我们不想传递日期参数...那么scrapy crawl spider1 -a date=date_here
和scrapy crawl spider1
将起作用