我正在寻找一种在scrapyd中设置作业的方法,它在本地创建一个文件,然后在下一次爬网时覆盖它的内容,而不是附加它。据我所知,只有使用scrapy我才能使用这个命令
scrapy crawl myspider -t json --nolog -o - > "/path/to/json/my.json"但是似乎没有办法在scrapyd或curl命令行(我用来设置scrapyd)中设置这些参数。
发布于 2018-12-03 23:13:33
您可以创建自己的提要存储。扩展scrapy的FileFeedStorage,重写open方法以在写入模式下返回文件(scrapy的FileFeedStorage在追加模式下返回文件)。
import os
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.extensions.feedexport import FileFeedStorage
class QuotesSpider(CrawlSpider):
name = 'toscrape.com'
start_urls = ['http://quotes.toscrape.com/']
rules = (
Rule(LinkExtractor(('quotes.toscrape.com/page/',)), callback='parsePage', follow=True),
)
custom_settings = {
'FEED_STORAGES': {
'file': 'myspider.MyFileFeedStorage'
},
'FEED_URI': 'file:///my/valid/file/path/out.json'
}
def parsePage(self, response):
return ({
'quote': quote.xpath('.//span[@class="text"]/text()').extract_first(),
'author': quote.xpath('.//small[@class="author"]/text()').extract_first(),
} for quote in response.xpath('//div[@class="quote"]'))
class MyFileFeedStorage(FileFeedStorage):
def open(self, spider):
dirname = os.path.dirname(self.path)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname)
return open(self.path, 'wb')如果您多次运行scrapy runspider myspider.py,您将看到每次都会重新创建输出文件(假设您的脚本名为myspider.py)。
发布于 2018-12-04 00:14:43
你是如何使用ScrapyD搜索爬虫的?通过Cron?不然呢?
我有两个想法,
1)向scrapyd发送命令前手动清空文件。
echo "" > /path/to/json/my.json && curl http://localhost:6800/schedule.json这将首先清除my.json的内容,然后调度爬行器。
2)在你的蜘蛛里,只要做
open("/path/to/json/my.json", 'w').close()https://stackoverflow.com/questions/53590097
复制相似问题