Как получить @src с помощью xpath и scrapy, если это данные svg-xml? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь получить URL-адрес из изображения с подделкой, но страница использует данные svg-xml для URL-адреса.В Инспекторе Chrome URL виден, но не в исходном коде.

Они используют:

<img class="main-image" data-product-uid="156597" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22320%22%20height%3D%22320%22%2F%3E" srcset="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22320%22%20height%3D%22320%22%2F%3E" sizes=" (min-width: 1280px) 387px, (min-width: 640px) calc(100vw - 320px) * 50%, 50vw " alt="" data-wa-src="https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__eb96638ada.png" data-wa-srcset="https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__7293fe2804.png 640w, https://www.theirurl.de/tag-heuer/formula-1/quartz-chronograph-43mm-caz1010.ba0842__eb96638ada.png 320w">

Интересно, что изображение data-wa-src не совпадаетодин.

Я пытаюсь получить это основное изображение часов: Пример страницы

1 Ответ

0 голосов
/ 05 декабря 2018

Когда вы запрашиваете главную страницу продукта, такую ​​как https://www.brogle.de/tag-heuer/formula-1/f1-auto-smallsecond-43/#156867, ваш браузер делает еще один запрос на описание продукта для https://www.brogle.de/ajaxCached/ajax-product-details/paction/showProductAjax/puid/156867/

Обратите внимание, что идентификатор продукта (156867) является единственной динамической частьюURL описания продукта, поэтому, если вам известен URL главной страницы продукта, вы можете извлечь идентификатор продукта и отправить запрос на описание:

запросы + пример lxml.html:

import requests
from lxml import html

main_url = "https://www.brogle.de/tag-heuer/formula-1/f1-auto-smallsecond-43/#156867"
api_url = "https://www.brogle.de/ajaxCached/ajax-product-details/paction/showProductAjax/puid/"
product_id = main_url.rsplit("#")[-1]
product_description = requests.get(api_url + product_id).text
html_source = html.fromstring(product_description)
image_src = html_source.xpath('//img[@itemprop="image"]/@src')

print(image_src[0])
#  'https://www.brogle.de/tag-heuer/formula-1/automatic-small-second-43mm-waz2014.ba0842__f4e2ac9b28.png'

PS Извините, я не использую Scrapy, но я уверен, что приведенный выше код можно легко преобразовать в код Scrapy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...