0

我目前正在从事一个学生的数据科学家项目,该项目包括通过图片构建鱼类识别系统。我们将使用 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

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

4

1 回答 1

3

有两个问题:

  • 根据文档,项目字段应该是image_urls,而不是img_urls(除非您覆盖IMAGES_URLS_FIELD设置)。
  • 该值应该是 URL 列表,而不是字符串(单个 URL)。目前,您仅使用 line 存储一个 URL item['img_urls'] = response.urljoin(imgUrl)
于 2018-02-21T14:05:38.060 回答