Scrapy未将输出保存到jsonline

kuarbcqp  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(375)

我组装了一个爬虫程序来提取在网站上找到的URL,并将它们保存到jsonline文件中:

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    name = 'medscape_crawler'
    allowed_domains = ['medscape.com']
    start_urls = ['https://www.medscape.com/']
    custom_settings = {
        'ROBOTSTXT_OBEY': False,
        'DOWNLOAD_DELAY': 2,
        'FEEDS': {'medscape_links.jsonl': {'format': 'jsonlines',}},
        'FEED_EXPORT_BATCH_ITEM_COUNT': 10,
        'JOBDIR': 'crawl_state',
    }

    def parse(self, response):
        yield {'url': response.url}  # Save this page's URL

        for href in response.css('a::attr(href)').getall():
            if href.startswith('http://') or href.startswith('https://'):
                yield response.follow(href, self.parse)

process = CrawlerProcess()
process.crawl(MySpider)
process.start()

Crawler成功收集了链接,但没有使用任何输出填充jsonline文件:

2023-05-28 21:20:31 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://portugues.medscape.com> (referer: https://www.medscape.com/)
2023-05-28 21:20:31 [scrapy.core.scraper] DEBUG: Scraped from <200 https://portugues.medscape.com>
{'url': 'https://portugues.medscape.com'}

jsonline文件保持为空。添加'FEED_EXPORT_BATCH_ITEM_COUNT': 10,不会进行早期保存。
任何帮助将不胜感激。
谢谢你!

des4xlb0

des4xlb01#

它确实有效,你可能想清理你的active.json文件在crawl_state目录。
如果要保存在不同的文件中,请使用FEED_URI_PARAMS。

custom_settings = {
    'ROBOTSTXT_OBEY': False,
    'DOWNLOAD_DELAY': 2,
    'FEEDS': {'json_files/batch-%(batch_id)d.jsonl': {'format': 'jsonlines'}},
    'FEED_EXPORT_BATCH_ITEM_COUNT': 10,
    'JOBDIR': 'crawl_state',
}

如果你暂停你的工作,那么你可能想设置overwriteFalse(如果你没有保存在不同的文件中,我还没有测试过)。

w1jd8yoj

w1jd8yoj2#

虽然您已经定义了“custom_settings”,但要使此自定义设置生效,您需要在项目中使用CrawlerProcess时传递一个包含您的自定义设置的Settings对象。

...
process = CrawlerProcess(MySpider.custom_settings)
process.crawl(MySpider)
process.start()

相关问题