#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
является то, что он поддерживает запуск нескольких пауков одновременно.