0

我想从这个 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);
}
4

3 回答 3

0

我知道您已经接受了答案,但如果您使用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'}
于 2020-03-30T20:56:45.790 回答
-1

当您发出请求时,网站会返回一些代码,这些代码将由您的浏览器处理。一些网站返回将构建页面的 javascript 代码。这是你的情况。该网站正在返回一些需要浏览器来处理 Java 脚本然后构建 HTML 的代码。
我不知道 axios 是否可以做到这一点,但你需要的是一个无头浏览器。我建议你Puppeteer
一个很好的教程在这里

于 2020-03-30T17:56:28.643 回答
-1

当后端返回 HTML 时,您要查找的类中没有 List 项。这是它的外观:

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

没有列表项。这就是id原因undefined。JavaScript 在浏览器中运行并填充列表。

好消息是你不需要运行浏览器/木偶来获得价格。该网站向后端查询以获取有关产品的详细信息。

这是网址: 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"
  },
  ...
] 

但是你从哪里得到产品的 id 呢?它在这里:

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

希望这可以帮助!

于 2020-03-30T18:11:47.770 回答