scrapy ERROR: Error processing {'image_urls':

I'm setting up a simple spider to download images form xkcd, this is the code I currentyl have:

spider:

import scrapy
from scrapy.loader import ItemLoader

from test_im.items import TestImItem

class SpiderSpider(scrapy.Spider):
    name = 'spider_'
    allowed_domains = ['xkcd.com/']
    start_urls = ['http://xkcd.com//']

    def parse(self, response):
        test_item  = TestImItem()
        relative_url = response.xpath('//*[@id="comic"]//@src').extract_first()
        image_urls = (response.urljoin(relative_url)  )
        print (image_urls)
        test_item['image_urls'] = image_urls 
        yield test_item

items:

import scrapy

class TestImItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    image_urls = scrapy.Field()

setings:

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = '/home/luis/Documentos/proyectos/test_im/test_im/images/'

I'm getting the following error:

2019-07-08 21:25:13 [scrapy.core.scraper] ERROR: Error processing {'image_urls': 'https://imgs.xkcd.com/comics/trained_a_neural_net.png'}
Traceback (most recent call last):
  File "/home/luis/anaconda3/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/home/luis/anaconda3/lib/python3.7/site-packages/scrapy/pipelines/media.py", line 79, in process_item
    requests = arg_to_iter(self.get_media_requests(item, info))
  File "/home/luis/anaconda3/lib/python3.7/site-packages/scrapy/pipelines/images.py", line 155, in get_media_requests
    return [Request(x) for x in item.get(self.images_urls_field, [])]
  File "/home/luis/anaconda3/lib/python3.7/site-packages/scrapy/pipelines/images.py", line 155, in <listcomp>
    return [Request(x) for x in item.get(self.images_urls_field, [])]
  File "/home/luis/anaconda3/lib/python3.7/site-packages/scrapy/http/request/__init__.py", line 25, in __init__
    self._set_url(url)
  File "/home/luis/anaconda3/lib/python3.7/site-packages/scrapy/http/request/__init__.py", line 62, in _set_url
    raise ValueError('Missing scheme in request url: %s' % self._url)
ValueError: Missing scheme in request url: h

As I understand it, 'ValueError: Missing scheme in request url: h' means that the image url is wrong.

But I can open it in the browser without issues.

'image_urls': 'https://imgs.xkcd.com/comics/trained_a_neural_net.png'

Upvotes: 2

Views: 683

Answers (1)

gangabass
gangabass

Reputation: 10666

Scrapy tryies to process your string as a list of image URLs:

test_item['image_urls'] = [image_urls]

Upvotes: 4

Related Questions