Проблемы с загрузкой изображений с помощью 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"
чтобы прояснить ситуацию:
- папка, в которой я ожидаю, что изображения будут сохранены с именем
Images
который я поместил вspider
папка под проектомtorrentspider
. - фактический адрес и
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()))