Проблемы с загрузкой изображений с помощью scrapy

Я написал скрипт на python scrapy для загрузки некоторых изображений с веб-сайта. Когда я запускаю свой скрипт, я вижу ссылку изображений (все они находятся в .jpg формат) в консоли. Однако, когда я открываю папку, в которой изображения должны быть сохранены после загрузки, я ничего не получаю. Где я совершаю ошибки?

это мой паук (я бегу от sublime text editor):

import scrapy
from scrapy.crawler import CrawlerProcess

class YifyTorrentSpider(scrapy.Spider):
    name = "yifytorrent"

    start_urls= ['https://www.yify-torrent.org/search/1080p/']

    def parse(self, response):
        for q in response.css("article.img-item .poster-thumb"):
            image = response.urljoin(q.css("::attr(src)").extract_first())
            yield {'':image}

c = CrawlerProcess({
    'USER_AGENT': 'Mozilla/5.0',   
})
c.crawl(YifyTorrentSpider)
c.start()

это то, что я определил в settings.py для изображений, которые будут сохранены:

ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
IMAGES_STORE = "/Desktop/torrentspider/torrentspider/spiders/Images"

чтобы прояснить ситуацию:

  1. папка, в которой я ожидаю, что изображения будут сохранены с именем Images который я поместил в spider папка под проектом torrentspider.
  2. фактический адрес и C:UsersWCSDesktoptorrentspidertorrentspiderspiders.

дело не в успешном запуске скрипта с помощью . Таким образом, любое решение для загрузки происходит с использованием из не то, что я ищу.

2 ответов


элемент, который вы приносите, не следует документации Scrapy. Как подробно в их медиа-производство документация элемент должен иметь поле с именем image_urls. Вы должны изменить свой метод разбора на что-то подобное этому.

def parse(self, response):
    images = []
    for q in response.css("article.img-item .poster-thumb"):
        image = response.urljoin(q.css("::attr(src)").extract_first())
        images.append(image)
    yield {'image_urls': images} 

Я только что проверил это, и это работает. Кроме того, как прокомментировал Прутви Кумар, IMAGES_STORE должен быть похож на

IMAGES_STORE = 'Images'

что поражает меня первое, что сканирование кода выше-это путь для IMAGES_STORE. the / означает, что вы идете к абсолютному корневому пути вашей машины, поэтому вы либо помещаете абсолютный путь туда, где хотите сохранить, либо просто делаете относительный путь от того, где вы запускаете свой искатель

Я на машине linux, поэтому мой абсолютный путь будет чем-то вроде IMAGES_STORE = /home/pk/myProjects/scraper/images

или

IMAGES_STORE = 'images'

кроме того, самое главное, если вы используете конвейер по умолчанию, переменная, которая содержит извлеченное изображение (где вы делаете extract_first()) должно быть буквально image_urls.

вы также пропустили несколько шагов. В вашем пауке добавьте следующее:

class ImgData(Item):
    image_urls=scrapy.Field()
    images=scrapy.Field()

на yield шаг, изменить на:

yield ImgData(image_urls=response.urljoin(q.css("::attr(src)").extract_first()))