Scrapy не может загружать изображения с URL-адреса

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

Вот мои items.py:

class Brand(scrapy.Item):
    name = scrapy.Field()
    url = scrapy.Field()
    brand_image = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()
    pass

Вот мой код паука:

import scrapy
import json
from scraper.items import Brand


class QuotesSpider(scrapy.Spider):
    name = "brandDetails"

    def start_requests(self):
        with open('brands.json') as data_file:
            data_item = json.load(data_file)
        urls = list()
        for item in data_item:
            urls.append(item["url"])
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        item = Brand()
        name = response.css("div.th::text").extract_first()
        name = name.replace('Products of ', '')
        item['name'] = name
        item['url'] = response.url
        urls = response.css("div.productimage img::attr(src)").extract_first()
        urls = "http://ozhat-turkiye.com" + urls
        item['image_urls'] = urls
        yield item

Вот код настройки:

BOT_NAME = 'scraper'
SPIDER_MODULES = ['scraper.spiders']
NEWSPIDER_MODULE = 'scraper.spiders'
IMAGE_STORE = 'C:/Users/SHAHRUKH/Desktop/AI'
ITEM_PIPELINES = {
  'scrapy.pipelines.images.ImagesPipeline': 1
}
DOWNLOAD_DELAY = 2

Вот вывод моей программы:

 {'image_urls': 'http://ozhat-turkiye.com/get.aspx?id=1882267',
 'name': ' Camille Bauer',
 'url': 'http://ozhat-turkiye.com/en/camille-bauer/'}

person shahrukh ijaz    schedule 29.09.2018    source источник
comment
Я предлагаю вам использовать yield Request(url) для загрузки изображения, а затем сохранить его в файл вместо использования Image Pipeline.   -  person Umair Ayub    schedule 30.09.2018


Ответы (1)


Вы можете записать эти изображения и сохранить их с помощью urllib.

import urllib     

urllib.urlretrieve(img_url, filename)

Например, проверьте код здесь.

person vijay athithya    schedule 01.10.2018
comment
есть ли способ проверить ошибку javascript с помощью селена python scrapy? - person shahrukh ijaz; 01.10.2018
comment
в основном у меня есть код селена, который нажимает следующую кнопку разбивки на страницы, и данные разбивки на страницы поступают из функции javascript, но через некоторое время функция щелчка селена не работает для меня и остается на той же странице есть ли другой способ нажать кнопку в скраппитоне? - person shahrukh ijaz; 01.10.2018
comment
Дело в том, что разбивку на страницы можно обрабатывать без использования самого селена, нет необходимости нажимать на него. В URL-адресе будет какой-то шаблон, который будет меняться в зависимости от разных страниц, например: abcd.com/productlist/page=1/someid, так что u можно жестко запрограммировать количество просматриваемых страниц или взять количество страниц и передать их, и в приведенном выше примере реализовано то же самое. - person vijay athithya; 02.10.2018
comment
да, я знаю, но в этом случае кнопка перехода на следующую страницу имеет функцию javascript в атрибуте href, поэтому мне нужен селен, но селен не всегда работает - person shahrukh ijaz; 02.10.2018
comment
если это так, вы можете использовать модуль запроса в python. - person vijay athithya; 03.10.2018
comment
не могли бы вы предоставить некоторые подробности, как использовать модуль запроса в scrapy - person shahrukh ijaz; 03.10.2018
comment
Узнайте, как происходит запрос и ответ (getpostman.com/apps — это можно использовать), зная, что мы можем сгенерировать запрос и получить ответ - person vijay athithya; 03.10.2018
comment
нет ли какого-либо способа отправить форму, просто используя scrapy scrapy.FormRequest.from_response??? - person shahrukh ijaz; 03.10.2018