我的Scrapy项目[' img_urls']不会下载该文件

时间:2018-02-21 12:45:10

标签: python image scrapy scrapy-spider scrapy-pipeline

我目前正在研究学生的数据科学家项目,该项目包括按照图片构建鱼类识别系统。我们将使用tensorflow来理解数据和数据。 scrapy找到大量的数据(鱼图和他的学名)。

我是scrapy的新手,但是自从3天以来我一直在努力工作,我已经写了一个基本的鱼基蜘蛛(你会在蜘蛛中找到这个网址&# 39;代码):

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

我得到了我想要的结果,但图片不会下载。我不明白为什么......另外,我已从其他网站下载了大量图片。

1 个答案:

答案 0 :(得分:2)

有两个问题:

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