CSS选择器代码,用于从棘手的网站抓取/解析数据

css selector code to scrape/parse data from tricky website

本文关键字:抓取 网站 数据 代码 选择器 用于 CSS      更新时间:2023-09-26

我很难开发一个足够的"CSS选择器"代码来抓取/解析以下HTML的几率。我对node.js相对较新。但是我过去成功地抓取了类似的网站。不幸的是,这个网站有点棘手(无论如何对我来说!我可以说问题一定是我使用的CSS选择器代码。你能告诉我如何编写一个代码,让我从中刮取赔率 11/2

<div class="market"..............>
   <header class=..........>
   <div class="market-content">
      <div class ="selection">
          <div class="selection name" data-  bind="html:selection.getTitle()"> Aston Villa </div>
          <selection-button params="....>
             <div>
               <div class="odds-button"..........>
                 <span class="price">
                   <span class="odds-convert"......> 11/2 </span>

很难只用那段HTML来说,但为此(使用jQuery):

$('.odds-button > . price > .odds-convert').text();

当然,也可能是选择器在其他地方匹配,然后您必须通过包含更长的路径来使其更具体。但是,如果 HTML 的结构发生变化,从一开始就使其过于具体会使它太脆弱。

我不知道你是如何抓取 Node.js 中的内容的,你正在使用哪些库或技术,但这就是我在客户端的做法:

var oddsElement = document.querySelector([
        ".market",
        ".market-content",
        ".selection",
        // obviously, change below to match your data attribute
        ".selection.name[data-SOME_KEY='"SOME_VALUE'"]",
        ".odds-button",
        "span.price",
        "span.odds-convert"
    ].join(" "));
if (typeof oddsElement === "object") {
    var odds = (oddsElement.textContent || oddsElement.innerText);
    // or could use "let" keyword in strict-mode Node.js for block-scope
} else { // no match
    console.warn("Odds cannot be found.");
}