【问题标题】:Parsing code on node JS with cheerio用cheerio解析节点JS上的代码
【发布时间】:2018-05-16 18:48:53
【问题描述】:

我正在尝试用cheerio 解析代码,但我需要一些帮助)

现在我的解析看起来像这样:

这是我希望看到的代码)如果你能帮助我,我将非常感激! :)

[ { version: '1.3',
    href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/4_com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk/',
    data: 'Dec. 26, 2016'},
  { version: ' 1.3 ',
    href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/2_com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk/',
    data: 'Dec. 25, 2016'},
    { version: ' 1.2 ',
      href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/3_com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk/',
      data: 'Aug. 26, 2016'} ]

我正在尝试解析的 HTML 代码:

<div class="row" style="margin-left: 2%; margin-right: 2%;">
<table class="striped" style="margin-left: auto; margin-right: auto;">
<tbody>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon 1.3 apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/4_com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk/">1.3</a></td><td>Dec. 26, 2016</td></tr>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon  1.3   apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/2_com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk/"> 1.3 </a></td><td>Dec. 25, 2016</td></tr>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon  1.2   apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/3_com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk/"> 1.2 </a></td><td>Aug. 26, 2016</td></tr>
</tbody>
</table>
</div>

我在cheerio (NodeJs) 上用于解析的代码:

   const row = $('.row');
   const version = [];
   const href = [];
   const data = [];

   row.find('tr').each(function (i, e) {
     version.push({"version": $(this).find("td a[title^='download']").text()});
     href.push({"href": $(this).find("td a").attr('href')});
     data.push({"data": $(this).find("td").eq(1).text()});
   });

【问题讨论】:

  • 您只需要 1 个数组,并使用 href、data、version 属性将对象推送到该数组中。
  • 你能写代码吗?请)

标签: javascript jquery node.js request cheerio


【解决方案1】:

您可以使用map 方法并返回对象数组,其中每个对象都是当前tr 的数据。

const data = $('.row table tr').map(function() {
  const a = $(this).find('td:first-child a');
  const td = $(this).find('td:last-child');

  return {
    version: a.text(),
    href: a.attr('href'),
    date: td.text()
  }
}).get();

console.log(data)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row" style="margin-left: 2%; margin-right: 2%;">
<table class="striped" style="margin-left: auto; margin-right: auto;">
<tbody>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon 1.3 apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/4_com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk/">1.3</a></td><td>Dec. 26, 2016</td></tr>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon  1.3   apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/2_com.girlsbeautysalon.android_summerhairsalon_2016-12-25.apk/"> 1.3 </a></td><td>Dec. 25, 2016</td></tr>
<tr><td><a title="download Summer Girl Hair Spa &amp; Salon  1.2   apk " onclick="ga('send', 'event', 'button', 'download_ver', 'com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk');" href="/download-app/com.girlsbeautysalon.android_summerhairsalon/3_com.girlsbeautysalon.android_summerhairsalon_2016-08-26.apk/"> 1.2 </a></td><td>Aug. 26, 2016</td></tr>
</tbody>
</table>
</div>

【讨论】:

  • 感谢它的工作! ) 但它仍然给了我不好的字段(比如第一个字段):{ version: '', href: undefined, date: 'com.girlsbea...' }, { version: '1.3', href: '/download-app/com.girlsbeautysalon.android_summerhairsalon/4_com.girlsbeautysalon.android_summerhairsalon_2016-12-26.apk/', date: 'Dec. 26, 2016' },
  • 也许您问题中的 html 与您尝试解析的 html 不同。否则它必须返回相同的结果
  • 这里是link 我认为是一样的。我想删除这些多余的字段,但不知道如何((
  • 您需要更好的选择器而不是行,因为页面上可能还有其他 row 元素。对于要解析的部分,您需要唯一的选择器。
猜你喜欢
  • 2018-10-23
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多