Соскрести URL с изображения с помощью Scrapy - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь почистить ссылки изображений с этого сайта

Изображение, отображаемое в начале страницы, имеет URL-адрес

<img src="//sc01.alicdn.com/kf/HTB1jvmMXmtYBeNjSspkq6zU8VXa3/Closed-Cell-Expanded-Perlite-Bulk-Expanded-Perlite.jpg_300x300.jpg" alt="Closed Cell Expanded Perlite Bulk Expanded Perlite Price" />

Изображение, которое появляется позже, имеет свой URL как,

<img src="//img.alicdn.com/tfs/TB1S_7kkY5YBuNjSspoXXbeNFXa-700-700.jpg_350x350.jpg" data-src="//sc01.alicdn.com/kf/HTB1IXB5abwTMeJjSszfq6xbtFXaQ/Expanded-Perlite-for-Agriculture.jpg_300x300.jpg" alt="Expanded Perlite for Agriculture" />

src во втором случае содержит ссылку на универсальное изображение, которое появляется до того, как загружается фактическое изображение страницы, а data_src - это фактический URL, который нужно удалить.

Поэтому я попытался этот код очистить URL с помощью троичных выражений (если еще).

Мой код

import scrapy

class AlibabaSpider(scrapy.Spider):
    name = 'alibaba'
    allowed_domains = ['alibaba.com']
    start_urls = ['https://www.alibaba.com/catalog/agricultural-growing-media_cid144?page=1']

def parse(self, response):
    url = '//img.alicdn.com/tfs/TB1S_7kkY5YBuNjSspoXXbeNFXa-700-700.jpg_350x350.jpg'
    for products in response.xpath('//div[contains(@class, "m-gallery-product-item-wrap")]'):
        img_url_datasrc = products.xpath('.//div[@class="offer-image-box"]/img/@data-src').extract_first()
        img_url_src = products.xpath('.//div[@class="offer-image-box"]/img/@src').extract_first()
        item = {
        'product_name': products.xpath('.//h2/a/@title').extract_first(),
        'image_url': img_url_datasrc if img_url_src == url else img_url_src, #This is problem
        }
        yield item

Результат не тот, который я хочу.

Редактировать

Результат запроса:

img_url_datasrc if img_url_src == url else img_url_src

enter image description here

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Попробуйте это =)

# -*- coding: utf-8 -*-
import scrapy


class AlibabaSpider(scrapy.Spider):
    name = 'alibaba'
    allowed_domains = ['alibaba.com']
    start_urls = ['https://www.alibaba.com/catalog/agricultural-growing-media_cid144?page=1']

    def parse(self, response):
        products = response.xpath('//div[@class="m-gallery-product-item-v2"]')
        img_data_url = ''

        for product in products:
            if product.xpath('.//div[@class="offer-image-box"]/img[contains(@src, "tfs")]'):
                img_data_url = product.xpath('.//div[@class="offer-image-box"]/img/@data-src').extract_first()
            else:
                img_data_url = product.xpath('.//div[@class="offer-image-box"]/img/@src').extract_first()

            item = {
                'product_name': product.xpath('.//h2/a/@title').extract_first(),
                'image_url': img_data_url,
            }
            yield item

result.json

result.json

0 голосов
/ 14 сентября 2018
'image_url': img_url_datasrc if img_url_src == url else img_url_datasrc, #This is problem

Это действительно проблема, вы устанавливаете URL изображения на img_url_datasrc в обоих случаях. Вы, вероятно, хотели:

'image_url': img_url_datasrc if img_url_src == url else img_url_src,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...