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