首页 > 解决方案 > Scrapy 在执行时抛出“ModuleNotFoundError”

问题描述

我在 scrapy 中编写了一个非常基本的蜘蛛,用于从 stackoverflow 的登录页面抓取问题的标题。在过去的几个小时里,我一直试图让它工作,但每次执行我的脚本时都会遇到同样的错误。完整的追溯如下。

items.py包括:

import scrapy

class StackoverflowspiderItem(scrapy.Item):
    name = scrapy.Field()

infograbber.py又名蜘蛛包含:

import scrapy
from scrapy import Selector
from scrapy.crawler import CrawlerProcess
from stackoverflowspider.items import StackoverflowspiderItem

class InfograbberSpider(scrapy.Spider):
    name = 'infograbber'
    allowed_domains = ['stackoverflow.com']
    start_urls = ['https://stackoverflow.com/questions/']

    def parse(self, response):
        sel = Selector(response)
        items = []
        for question in sel.css(".question-hyperlink"):
            title = StackoverflowspiderItem()
            title['name'] = question.css("::text").extract_first()
            items.append(title)
        return items

c = CrawlerProcess({
    'USER_AGENT': 'Mozilla/5.0',

})
c.crawl(InfograbberSpider)
c.start()

这是Project Hierarchy

在此处输入图像描述

我遇到的错误:

Traceback (most recent call last):
  File "C:\Users\WCS\Desktop\stackoverflowspider\stackoverflowspider\spiders\infograbber.py", line 4, in <module>
    from stackoverflowspider.items import StackoverflowspiderItem
ModuleNotFoundError: No module named 'stackoverflowspider'

仅供参考:当我像下面这样尝试时,它可以工作,但我不希望这样。

import scrapy
from scrapy.crawler import CrawlerProcess

class InfograbberSpider(scrapy.Spider):
    name = 'infograbber'
    allowed_domains = ['stackoverflow.com']
    start_urls = ['https://stackoverflow.com/questions/']

    def parse(self, response):
        for question in response.css(".question-hyperlink"):
            print(question.css("::text").extract_first())


c = CrawlerProcess({
    'USER_AGENT': 'Mozilla/5.0',

})
c.crawl(InfograbberSpider)
c.start()

我哪里错了?提前感谢任何解决方案。顺便说一句,我正在使用python 3.6and scrapy 1.5.0。我已经尝试使用cmdsublime text editor执行该文件,但在这两种情况下我都会遇到相同的错误。

标签: pythonpython-3.xweb-scrapingscrapyscrapy-spider

解决方案


我认为你的问题是你执行spider这样的:

python infograbber.py

但你需要进入你的文件夹scrapy.cfg并像这样运行scrapy:

scrapy crawl infograbber

推荐阅读