Попытка загрузить файлы без запуска проекта scrapy, но из файла .py. Созданный пользовательский конвейер в файле python, эта ошибка появляется, как указано

#scrapy #scrapy-pipeline

Вопрос:

 import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.pipelines.files import FilesPipeline
from urllib.parse import urlparse
import os

class DatasetItem(scrapy.Item):
    file_urls = scrapy.Field()
    files = scrapy.Field()

class MyFilesPipeline(FilesPipeline):
    pass



class DatasetSpider(scrapy.Spider):
    name = 'Dataset_Scraper'
    url = 'https://kern.humdrum.org/cgi-bin/browse?l=essen/europa/deutschl/allerkbd'
    

    headers = {
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53       7.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
    }
    
    custom_settings = {
            'FILES_STORE': 'Dataset',
            'ITEM_PIPELINES':{"/home/LaxmanMaharjan/dataset/MyFilesPipeline":1}

            }
    def start_requests(self):
        yield scrapy.Request(
                url = self.url,
                headers = self.headers,
                callback = self.parse
                )

    def parse(self, response):
        item = DatasetItem()
        links = response.xpath('.//body/center[3]/center/table/tr[1]/td/table/tr/td/a[4]/@href').getall()
        
        for link in links:
            item['file_urls'] = [link]
            yield item
            break
        

if __name__ == "__main__":
    #run spider from script
    process = CrawlerProcess()
    process.crawl(DatasetSpider)
    process.start()
    
 

Ошибка : Ошибка загрузки объекта home-LaxmanMaharjan-набор данных-Конвейер’: неполный путь

путь правильный

Как использовать пользовательский файловый конвейер в этом файле python??? Справка

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

Комментарии:

1. Ваш вопрос мог бы быть более ясным. Я сомневаюсь, что этот ITEM_PIPELINES путь верен. В любом случае, попробуйте заменить "/home/LaxmanMaharjan/dataset/MyFilesPipeline" на MyFilesPipeline

2. @tomjn Да, сэр, я сделал это, но там написано, что MyFilesPipeline-это не путь

3. Ты сделал "MyFilesPipeline" или MyFilesPipeline ? Последнее должно сработать.

Ответ №1:

В случае, если код конвейера, код паука и запуск процесса хранятся в одном файле
Вы можете использовать __main__ в пути для включения конвейера:

 custom_settings = {
        'FILES_STORE': 'Dataset',
        'ITEM_PIPELINES':{"__main__.MyFilesPipeline":1}
        }