Cheerio web scraping ul> li атрибут - PullRequest
0 голосов
/ 30 марта 2020

Я хочу очистить "data-price" от этого URL, но он возвращается неопределенным. Есть идеи?

https://i.stack.imgur.com/N9gei.png

async function variant() {
    const response = await axios("https://extrabutterny.com/collections/release-draws/products/nike-sb-dunk-low-pro-blue-fury-bq6817-400?variant=31800767021104");   
    console.log("response: ", response);
    const html = await response.data;
    const $ = cheerio.load(html);
    const id = $(".DrawApp-SizeChartList > li").attr("data-price");
    console.log(id);
}

Ответы [ 3 ]

0 голосов
/ 30 марта 2020

Когда HTML возвращается бэкэндом, в списке искомого элемента нет элемента List. Вот как это выглядит:

<ul class="DrawApp-SizeChartList">
</ul>

Нет элемента списка. Вот почему id это undefined. JavaScript запускается в браузере и заполняет список.

Хорошо, что вам не нужно запускать браузер / кукловод, чтобы получить цену. Веб-сайт делает запрос в бэкэнд, чтобы получить подробную информацию о продукте.

Вот URL: https://eb-draw.herokuapp.com/draws/4482352611376

Вы увидите цену здесь:

"variants": [
  {
    "id": 16793,
    "draw_id": 1764,
    "variant_id": "31800767021104",
    "variant_label": "8",
    "variant_price": "100.00",
    "winner_count": 3,
    "winners_left": 3,
    "current_entries": 0,
    "created_at": "2020-03-27 21:19:14",
    "updated_at": "2020-03-27 21:19:14"
  },
  ...
] 

Но откуда у вас идентификатор продукта? Это здесь:

$(".js-price-preview").attr("data-product-id")
// "4482352611376"

Надеюсь, это поможет!

0 голосов
/ 30 марта 2020

Я знаю, что вы уже приняли ответ, но если вы используете https://github.com/whatsdis/web-scraping-language

, тогда вы можете написать WSL, который также может отображать javascript страниц, и вы можете использовать Xpath:

GOTO https://extrabutterny.com/collections/release-draws/products/nike-sb-dunk-low-pro-blue-fury-bq6817-400?variant=31800767021104

EXTRACT {'price':'*[@class="DrawApp-SizeChartList"]/li/@data-price'}
0 голосов
/ 30 марта 2020

Когда вы делаете запрос, веб-сайт возвращает код, который будет обработан вашим браузером. Некоторые сайты возвращают код javascript, который будет создавать страницу. Это твой случай. Веб-сайт возвращает некоторый код, который необходим браузеру для обработки скрипта java, а затем для сборки HTML.
Я не знаю, может ли это сделать топор ios, но вам нужен Безголовый браузер . Я предлагаю вам Кукольник .
Хороший учебник здесь .

...