Scrapy выдает «ModuleNotFoundError» при выполнении - PullRequest
0 голосов
/ 03 июля 2018

Я написал очень простой паук в скрапе, чтобы вычеркнуть заголовок вопросов с целевой страницы stackoverflow. Я пытался заставить его работать последние несколько часов, но я получаю одну и ту же ошибку каждый раз, когда выполняю свой сценарий. Полный возврат приведен ниже.

items.py включает в себя:

import scrapy

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

infograbber.py aka spider содержит:

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:

enter image description here

У меня ошибка:

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.6 и scrapy 1.5.0. Я пытался с помощью cmd и sublime text editor выполнить файл, но в обоих случаях я получаю ту же ошибку.

1 Ответ

0 голосов
/ 03 июля 2018

Я думаю, что ваша проблема в том, что вы выполняете spider следующим образом:

python infograbber.py

но вам нужно зайти в папку, где находится scrapy.cfg и запустить scrapy, как это:

scrapy crawl infograbber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...