首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使scrapyd覆盖文件

使scrapyd覆盖文件
EN

Stack Overflow用户
提问于 2018-12-03 16:38:12
回答 2查看 207关注 0票数 1

我正在寻找一种在scrapyd中设置作业的方法,它在本地创建一个文件,然后在下一次爬网时覆盖它的内容,而不是附加它。据我所知,只有使用scrapy我才能使用这个命令

代码语言:javascript
复制
scrapy crawl myspider -t json --nolog -o - > "/path/to/json/my.json"

但是似乎没有办法在scrapyd或curl命令行(我用来设置scrapyd)中设置这些参数。

EN

回答 2

Stack Overflow用户

发布于 2018-12-03 23:13:33

您可以创建自己的提要存储。扩展scrapy的FileFeedStorage,重写open方法以在写入模式下返回文件(scrapy的FileFeedStorage在追加模式下返回文件)。

代码语言:javascript
复制
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)。

票数 0
EN

Stack Overflow用户

发布于 2018-12-04 00:14:43

你是如何使用ScrapyD搜索爬虫的?通过Cron?不然呢?

我有两个想法,

1)向scrapyd发送命令前手动清空文件。

代码语言:javascript
复制
echo "" > /path/to/json/my.json && curl http://localhost:6800/schedule.json

这将首先清除my.json的内容,然后调度爬行器。

2)在你的蜘蛛里,只要做

代码语言:javascript
复制
open("/path/to/json/my.json", 'w').close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53590097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档