用cheerio从同一个tr中提取多个值?

时间:2018-05-19 20:29:14

标签: javascript node.js web-scraping cheerio

我正在构建一个webscape工具来帮助收集我所建造的迷你体育奇数据库的数据。我需要的数据位于https://www.actionnetwork.com/mlb/live-odds。数据本身属于" Bets"部分。下面是该页面中的HTML示例,我正在迭代并尝试从中提取所需的数据。

HTML

"list.errorForeground": "#f66",
"list.warningForeground": "#ff6",

在实际网页中,有几个表行。从每个表格行我试图从下一行拉出来:

数据

<tbody>
 <tr>
  <td class="p-0"></td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-130<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9.5<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-108<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right border-top-1 border-left-0 border-right-0 border-bottom-0" style="height:104px">
     <div class="text-center">
        <a class="" href="/subscribe">
           <svg viewBox="0 0 24 24" width="25" height="25" xmlns="https://www.w3.org/2000/svg" class="" style="stroke:#57A773;stroke-width:2;fill:#FFF">
              <path d="M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z"></path>
           </svg>
        </a>
     </div>
  </td>
  <td class="text-right border-left" style="height:104px"><span class="d-block ">51%</span><span class="d-block mt-1 ">49%</span></td>
  <td class="text-right border-right" style="height:104px">
     <a class="" href="/subscribe">
        <svg viewBox="0 0 24 24" width="30" height="30" xmlns="https://www.w3.org/2000/svg" class="" style="stroke:#57A773;stroke-width:2;fill:#FFF">
           <path d="M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z"></path>
        </svg>
     </a>
  </td>
  <td class="text-right" style="height:104px"><span class="d-block ">49%</span><span class="d-block mt-1 ">51%</span></td>
  <td class="text-right border-right" style="height:104px">
     <a class="" href="/subscribe">
        <svg viewBox="0 0 24 24" width="30" height="30" xmlns="https://www.w3.org/2000/svg" class="" style="stroke:#57A773;stroke-width:2;fill:#FFF">
           <path d="M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z"></path>
        </svg>
     </a>
  </td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-107<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-107<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-108<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right" style="height:104px"><span class="d-block highlight-green">-109<span class="fz-1 fz-md-2"></span></span><span class="d-block mt-1 highlight-green">9<span class="fz-1 fz-md-2"></span></span></td>
  <td class="text-right border-left" style="height:104px">No Picks</td>
  <td class="text-right d-flex flex-column" style="height:104px">
     <div><button type="submit" class="btn pointer font-weight-semibold btn-outline-primary m-0 fz-1 text-truncate">+</button></div>
     <div><button type="submit" class="btn pointer font-weight-semibold btn-outline-primary mt-1 fz-1 text-truncate">+</button></div>
  </td>
.............
</tr>

&#34; d-block&#34; &#34; d-block mt-1&#34; 包含我需要的信息。

以下是我用来执行此操作的代码:

代码

<td class="text-right border-left" style="height:104px"><span class="d-block ">51%</span><span class="d-block mt-1 ">49%</span></td>

首先,第一个cheerio块从网站正确地提取数据,然而,当第二个运行并尝试抓住另一个const cheerio = require('cheerio'); const request = require('request') request('https://www.actionnetwork.com/mlb/live-odds', function (err, res, html) { if (!err && res.statusCode == 200) { var $ = cheerio.load(html); $('td.text-right.border-left span.d-block').each(function(i, element) { var a = $(this).prev(); console.log(a.text()) }); $('td.text-right.border-left span.d-block').each(function(i, element) { var b = $(this).prev(); console.log(b.text()) }); } }); 时,它会打印出第一个的结果。

我的下一个问题是我似乎无法弄清楚如何记录我同时抓取的两个值。当它每行迭代时,它打印出第一个跨度的值集,然后移动到下一个并打印出该跨度的值集。理想情况下,它会在迭代时每行打印出两个值。

1 个答案:

答案 0 :(得分:1)

您可以在一个循环中执行此操作,只检索第一个password = hey123 "You have entered ****** as your password" ,然后使用span来获取其兄弟。

.next