#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}
}