首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy脚本没有将设置传递给爬行器

Scrapy脚本没有将设置传递给爬行器
EN

Stack Overflow用户
提问于 2021-08-03 21:37:40
回答 1查看 35关注 0票数 0

我试图通过一个脚本运行一个scrapy,但我认为get_project_settings()并没有指向我的settings.py,不管它们是在同一个目录中。

由于某些原因,当我在VSCODE中选择“运行代码”而不是“在终端中运行”时,它有时会起作用。

脚本:

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

当scrapy作为活动状态运行时,我的流水线不会显示在控制台中,但我的刮板运行。我该如何解决这个问题?

控制台流水线:

代码语言:javascript
复制
2021-08-03 16:35:52 [scrapy.middleware] INFO: Enabled item pipelines:
[]
EN

回答 1

Stack Overflow用户

发布于 2021-08-04 10:18:11

settings.py位置由settings.cfg定义,例如

代码语言:javascript
复制
; settings.cfg

[settings]
default = spider_name.settings

从您的描述中可以看出,VSCode中的“运行代码”显然不是从项目根目录开始的,也无法获取settings.cfg

让我们试试这个,

代码语言:javascript
复制
import os 
import sys
PROJECT_ROOT = "C:\\Users\\Denze\\Projects\\testing\\amazonScraper"
os.chdir(PROJECT_ROOT)

from scrapy.crawler import CrawlerProcess 
...

顺便说一句,你可能不需要直接使用CrawlProcessscrapy提供了从脚本启动爬行器的cmdline

代码语言:javascript
复制
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的唯一优势是它支持同时启动多个爬行器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68643055

复制
相关文章

相似问题

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