我的 Scrapy 项目 ['img_urls'] 没有下载文件

My Scrapy item['img_urls'] doesn't download the file

我目前正在从事一个学生的数据科学家项目,该项目包括通过图片构建鱼类识别系统。我们将使用tensorflow从数据中理解& scrapy找到海量数据(鱼图&他的学名)。

我是 scrapy 的新手,但从 3 天以来我一直在努力工作,我已经编写了一个基本的 fishbase 蜘蛛(你会在蜘蛛代码中找到 url):

import scrapy
from ..items import FishbaseItem

class FishbaseSpider(scrapy.Spider):
    name = 'fishbase'
    allowed_domains = ['fishbase.org']
    start_urls = [
        'http://fishbase.org/ListByLetter/ScientificNamesQ.htm',
    ]

    def parse(self, response):
        all_fish = response.xpath('//tbody/tr')
        for fish in all_fish:
            taxo = fish.xpath('td/a/i/text()').extract()
            fish_url = fish.xpath('td/a/@href').extract_first()

            item = FishbaseItem()
            item['taxonomy'] = taxo

            r=scrapy.Request(url=response.urljoin(fish_url),callback=self.parseFish)
            r.meta['item'] = item
            yield r

    def parseFish(self, response):
        item = response.meta['item']
        imgUrl = response.xpath('//div/span/div/a/img/@src').extract_first()
        item['img_urls'] = response.urljoin(imgUrl)
        yield item

这是项目文件:

import scrapy
class FishbaseItem(scrapy.Item):
    taxonomy = scrapy.Field()
    fish_url = scrapy.Field()
    img_urls = scrapy.Field()

和设置文件:

BOT_NAME = 'fishbase'

SPIDER_MODULES = ['fishbase.spiders']

NEWSPIDER_MODULE = 'fishbase.spiders'

ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
IMAGES_STORE = 'tmp/images/'

ROBOTSTXT_OBEY = True

我得到了我想要的结果,但无法下载图像。我不明白为什么...另外,我从其他网站下载了一大堆图片。

有两个问题:

  • 根据 documentation,项目字段应为 image_urls,而不是 img_urls(除非您覆盖 IMAGES_URLS_FIELD 设置)。
  • 该值应该是 URL 的列表,而不是字符串(单个 URL)。目前你只存储一个 URL 行 item['img_urls'] = response.urljoin(imgUrl).