Я использую 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", ты можешь легко догадаться, что я новичок, пытающийся разработать свой первый скребок. Я был бы очень признателен за помощь эксперта.
С уважением