Загрузка изображений с помощью scrapy

Я начинаю с терапии, и у меня есть первая настоящая проблема. Это загрузка изображений. Так что это мой паук.

from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.selector import HtmlXPathSelector from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from example.items import ProductItem from scrapy.utils.response import get_base_url import re class ProductSpider(CrawlSpider): name = "product" allowed_domains = ["domain.com"] start_urls = [ "http://www.domain.com/category/supplies/accessories.do" ] def parse(self, response): hxs = HtmlXPathSelector(response) items = [] sites = hxs.select('//td[@class="thumbtext"]') number = 0 for site in sites: item = ProductItem() xpath = '//div[@class="thumb"]/img/@src' item['image_urls'] = site.select(xpath).extract()[number] item['image_urls'] = 'http://www.domain.com' + item['image_urls'] items.append(item) number = number + 1 return items 

Когда я указываю ITEM_PIPELINES и IMAGES_STORE в settings.py , я получаю правильный URL-адрес для изображения, которое я хочу загрузить (скопируйте его в браузер для проверки).

Но когда я отказываюсь от комментариев, я получаю следующую ошибку:

 raise ValueError('Missing scheme in request url: %s' % self._url') exceptions.ValueError: Missing scheme in request url:h 

и я не могу загрузить свои фотографии.

Я искал весь день и не нашел ничего полезного.

  • Передайте входной файл в scrapy, содержащий список доменов, подлежащих очистке
  • Почему мои правила Scraw CrawlSpider не работают?
  • Использование Middleware для игнорирования дубликатов в Scrapy
  • Принудительный мой паук для паузы, чтобы остановить сканирование
  • Почему мой второй запрос не вызван в методе parse моего scrapy spider
  • Scrapy spider не сохраняет состояние (постоянное состояние)
  • Scrapy: Каков правильный способ использования start_requests ()?
  • Как я могу извлечь только текст в селекторе scrapy в python
  • 2 Solutions collect form web for “Загрузка изображений с помощью scrapy”

    Я думаю, что URL-адрес изображения, который вы очистили, относительный. Чтобы создать абсолютный URL-адрес, используйте urlparse.urljoin :

     def parse(self, response): ... image_relative_url = hxs.select("...").extract()[0] import urlparse image_absolute_url = urlparse.urljoin(response.url, image_relative_url.strip()) item['image_urls'] = [image_absolute_url] ... 

    Не использовали ITEM_PIPELINES, но документы говорят:

    В Spider вы очищаете элемент и помещаете URL-адреса его изображений в поле image_urls.

    Итак, item ['image_urls'] должен быть списком URL-адресов изображений. Но ваш код имеет:

     item['image_urls'] = 'http://www.domain.com' + item['image_urls'] 

    Таким образом, я предполагаю, что он выполняет итерацию вашего единственного URL-символа символом char – используя каждый в качестве URL-адреса.

    Я думаю, что вам может понадобиться предоставить свой URL-адрес изображения в списке для элемента:

     item['image_urls'] = [ 'http://www.domain.com' + item['image_urls'] ] 
    Python - лучший язык программирования в мире.