首页 > 解决方案 > 使用scrapy下载图像时遇到问题

问题描述

我在 python scrapy 中编写了一个脚本来从网站下载一些图像。当我运行我的脚本时,我可以在控制台中看到图像的链接(它们都是.jpg格式的)。但是,当我打开下载完成后应该保存图像的文件夹时,我什么也没有。我在哪里犯错误?

这是我的蜘蛛(我从崇高的文本编辑器运行):

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我放置在spiderproject 下的文件夹中torrentspider
  2. Images文件夹的实际地址是C:\Users\WCS\Desktop\torrentspider\torrentspider\spiders.

这不是在文件的帮助下成功运行脚本items.py。因此,任何使用items.py文件进行下载的解决方案都不是我想要的。

标签: pythonpython-3.xweb-scrapingscrapyscrapy-spider

解决方案


您生成的项目不遵循 Scrapy 的文档。正如他们的媒体管道文档中详述的那样,该项目应该有一个名为image_urls. 您应该将 parse 方法更改为与此类似的方法。

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} 

我刚刚对此进行了测试,并且可以正常工作。此外,正如 Pruthvi Kumar 评论的那样, IMAGES_STORE 应该就像

IMAGES_STORE = 'Images'

推荐阅读