Почему я получаю «ModuleNotFoundError» при запуске моего паука? - PullRequest
0 голосов
/ 29 июня 2019

Я использую scrapy 1.5.2 с питоном 3.

У меня очень простой паук, и я создал небольшой конвейер для преобразования поля даты моего элемента.

Вот папка моего дерева моего проекта "Предприятия": http://prntscr.com/o8axfc

Как вы можете видеть на этом скриншоте, я создал папку "pipelines", куда я добавил файл tidyup.py, куда я добавил этот код:

from datetime import datetime

class TidyUp(object):
    def process_item(self, item, spider):
        item['startup_date_creation']= map(datetime.isoformat, item['startup_date_creation'])
        return item

Вы также можете видеть на своем скриншоте, я добавил в settings.py моего проекта параметры:

ITEM_PIPELINES = {'entreprises.pipelines.tidyup.TidyUp': 100}

Вот код моего паука usine-digitale2.py:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.utils.response import open_in_browser


def parse_details(self,response):
    if "item_name" not in response.body:
        open_in_browser(response)
        
    item=response.mega.get('item',None)
    if item:
        return item
    else:
        self.logger.warning("pas d'item reçu pour %s", response.url)
        
        
        

class UsineDigital2Spider(CrawlSpider):
    name = 'usine-digital2'
    allowed_domains = ['website.fr']
    start_urls = ['https://www.website.fr/annuaire-start-up/']

    rules = (
        Rule(LinkExtractor(restrict_xpaths="//*[@rel='next']")),
        Rule(LinkExtractor(restrict_xpaths="//*[@itemprop='url']"),
             callback='parse_item')
    )

    def parse_item(self, response):
        i = {}    
        
        i["startup_name"] = response.xpath("//h1/text()").extract()
        i["startup_date_creation"] = response.xpath("//*[@itemprop='foundingDate']/@content").extract()
        i["startup_website"] = response.xpath ("//*[@id='infoPratiq']//a/@href").extract()
        i["startup_email"] = response.xpath ("//*[@itemprop='email']/text()").extract()
        i["startup_address"] = response.xpath ("//*[@id='infoPratiq']//p/text()").extract()
        i["startup_founders"] = response.xpath ("//*[@itemprop='founders']/p/text()").extract()
        i["startup_market"] = response.xpath ("//*[@id='ficheStartUp']/div[1]/article/div[6]/p").extract()
        i["startup_description"] = response.xpath ("//*[@itemprop='description']/p/text()").extract()
        i["startup_short_description"] = response.xpath ("//*[@itemprop='review']/p").extract()
        
        return i

Когда я запускаю команду:

scrapy crawl usine-digital2 -s CLOSESPIDER_ITEMCOUNT=30

Я получаю это сообщение об ошибке:

ModuleNotFoundError: нет модуля с именем 'entreprises.pipelines.tidyup'; «entreprises.pipelines» не является пакетом

А вот и вход в мой терминал:

http://prntscr.com/o8azt0

Я искал везде в своем коде. Я не вижу никаких ошибок. Этот код взят из книги «Изучите Scrapy» (от Dimitrios Kouzis-loukas), где я следую инструкциям. Я не понимаю, почему это не работает.

Вы можете найти весь исходный код проекта "Энтерпрайз" в области терапии:

https://github.com/FormationGrowthHacking/scrapy/tree/master/entreprises

Когда я читаю книгу "Изучай Scrapy", ты можешь легко догадаться, что я новичок, пытающийся разработать свой первый скребок. Я был бы очень признателен за помощь эксперта.

С уважением

1 Ответ

2 голосов
/ 29 июня 2019

У вас есть pipelines папка и pipelines.py файл в вашем проекте, который вызывает проблему.

enter image description here

Я рекомендую удалить папку и переместить класс конвейера в pipelines.py файл

или

Удалить pipelines.py и добавить pipelines/__init__.py с этим импортом:

# -*- coding: utf-8 -*-
from .tidyup import TidyUp

Также в settings.py:

ITEM_PIPELINES = {'entreprises.pipelines.TidyUp': 100}
...