Сценарий Scrapy не передает настройки spider

#python #python-3.x #scrapy

Вопрос:

Я пытаюсь запустить скрап с помощью скрипта, но, по-моему get_project_settings() , он не указывает на settings.py то, что я нахожусь в одном каталоге друг с другом.

По какой-то причине это иногда срабатывает, когда я выбираю «запустить код», но не «запустить в терминале» в VSCODE.

скрипт:

 import os 
import sys 
sys.path.append("C:\Users\Denze\Projects\testing\amazonScraper\amazonScraper")

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 
from spiders.amazon_spider import AmazonSpider


class SpiderRunner():
    def __init__(self, spiderName):

        print("--REACTOR START INFO--")
        self.process = CrawlerProcess(get_project_settings())
        print("--REACTOR END--")
        self.spiderName = spiderName

    def scrape(self):
        self.process.crawl(self.spiderName)
        self.process.start()

SpiderRunner(AmazonSpider).scrape()

 

Мой конвейер не отображается в консоли, когда скребок работает как активный, как и должно быть, но мой скребок работает. Как мне это исправить?

консольная трубопроводная линия:

 2021-08-03 16:35:52 [scrapy.middleware] INFO: Enabled item pipelines:
[]
 

Ответ №1:

settings.py местоположение определяется settings.cfg , например

 ; settings.cfg

[settings]
default = spider_name.settings
 

Из вашего описания очевидно, что «запуск кода» в VSCode не начинался с корневого каталога проекта и не мог получить settings.cfg .

Давайте попробуем это,

 import os 
import sys
PROJECT_ROOT = "C:\Users\Denze\Projects\testing\amazonScraper"
os.chdir(PROJECT_ROOT)

from scrapy.crawler import CrawlerProcess 
...

 

Кстати, вам, возможно, не понадобится использовать CrawlProcess напрямую. scrapy обеспечивает cmdline запуск spider из сценария.

 import os 
PROJECT_ROOT = "C:\Users\Denze\Projects\testing\amazonScraper"
os.chdir(PROJECT_ROOT)

from scrapy import cmdline    
cmdline.execute("scrapy crawl myspidername".split())
 

Единственным преимуществом CrawlerProcess является то, что он поддерживает запуск нескольких пауков одновременно.