Выскабливание выпадающих подсказок - PullRequest
0 голосов
/ 03 января 2019

У меня возникли некоторые проблемы при попытке получить данные из выпадающей кнопки, и ни один из ответов на сайте (или, по крайней мере, те, которые были найдены у меня) не помог мне.

Сайт, который я пытаюсь почистить, это Amazon, например, «Nike Shoes».

Когда я вхожу в продукт «Nike Shoes», я могу получить такой продукт:

https://www.amazon.com/NIKE-Flex-2017-Running-Shoes/dp/B072LGTJKQ/ref=sr_1_1_sspa?ie=UTF8&qid=1546518735&sr=8-1-spons&keywords=nike+shoes&psc=1

Где размер и цвет приходит со страницей. Так что соскабливать просто.

Проблема возникает, когда я получаю этот тип продуктов:

https://www.amazon.com/NIKE-Lebron-Soldier-Mid-Top-Basketball/dp/B07KJJ52S4/ref=sr_1_3?ie=UTF8&qid=1546518445&sr=8-3&keywords=nike+shoes

Где мне нужно выбрать размер и, возможно, цвет, а также цену, если я выберу другие размеры.

У меня вопрос, есть ли способ, например, получить доступ к каждому «размеру обуви», чтобы я мог хотя бы проверить цену на этот размер?

Если бы на странице был какой-то список с размерами в исходном коде, это было бы не так сложно, но страница меняется, когда я выбираю размер, и в источнике не появляется «список» размеров обуви (также URL не меняется).

1 Ответ

0 голосов
/ 03 января 2019

Большинство веб-сайтов электронной коммерции имеют дело с вариантами, встраивая json в html и загружая соответствующий выбор с помощью javascript.Поэтому, как только вы очистите html, у вас, скорее всего, будут все варианты данных.

В вашем случае в html-теле будут указаны размеры обуви, их цены и т. Д.Если вы ищете достаточно уникальное имя варианта, вы можете увидеть json в теле:

enter image description here

Теперь вам нужно:

  1. Определите, где находится json-часть:

    Обычно он находится где-то в <script> тегах или как data-<something> атрибут любого тега.

  2. Извлечение jsonpart:

    Если он встроен в javascript напрямую, вы можете очистить его с помощью регулярного выражения:

    script = response.xpath('//script/text()').extract_frist()
    import re
    # capture everything between {}
    data = re.findall(script, '(\{.+?\}_') 
    
  3. Загрузите json как dict и проанализируйте дерево, например:

    import json
    d = json.loads(data[0])
    d['products'][0]
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...