使用 jQuery 抓取 HTML 中的子元素?

问题描述 投票:0回答:1

我目前正在编写一个脚本,用于从 HTML 页面中抓取一些非常基本的信息。具体来说,我正在尝试从 allmusic.com 获取有关艺术家的一些信息。我正在使用 jQuery 在 Node.js 中编写此脚本来进行实际的抓取,并通过使用这篇博文中的示例使其在一定程度上发挥作用。

我想做的是对一位流行艺术家进行搜索,然后在第一个结果上存储一些基本信息,这几乎完全是我正在寻找的艺术家。我可以使用下面的代码提取有问题的表格,但我不知道如何从 HTML 中获取前几个

td
元素,而这正是我真正需要做的。我的node.js代码如下:

var request = require('request'),
    jsdom = require('jsdom');

request({ uri:'http://allmusic.com/search/artist/lady+gaga' }, function (error, response, body) {

  jsdom.env({
    html: body,
    scripts: [
      'http://code.jquery.com/jquery-1.5.min.js'
    ]
  }, function (err, window) {
    var $ = window.jQuery;

    // jQuery is now loaded on the jsdom window created from 'agent.body'
    var search = $('.search-results').html();
    if(search != null){
      //gah what can i do here?!?
    }
  });
});

下面是有问题的 HTML 块,这样您就不需要自己去查找它:

<table class="search-results" border="0" cellpadding="0" cellspacing="0" width="100%">
   <tr>
      <th class="relevance">
          <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:relevance-asc" title="order by relevance">Relevance</a>
      </th>
      <th width="10px">&nbsp;</th>

      <th>
         <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:name-asc" title="order by name">Name</a>
      </th>
      <th width="75px">
          <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:genre-asc" title="order by genre">Genre</a>
       </th>
       <th width="200px">Years Active</th>

    </tr>

           ACTUAL RELEVANT STUFF THAT I WANT ARE BELOW

    <tr>
       <td class="relevance text-center">
           <div class="bar" style="width:100%" title="100%"></div>
       </td>
       <td class="text-center"></td>
       <td><a href="http://www.allmusic.com/artist/lady-gaga-p1055684">Lady Gaga</a></td>

        <td>Pop/Rock</td>   //SPECIFICALLY THIS
        <td>00s</td>
    </tr>

此表中还有很多条目,但这是第一个结果。是否可以创建一个 td 数组或类似的数组并获得正确的索引?对于每个艺术家来说,它应该是相同的索引,假设我总是会得到第一个结果。

如果这是不可能的,还有其他方法可以实现我的目标吗?或者,是否有更好的方法来完成我尝试使用 node.js 做的事情?我看了很多不同的选项,这似乎是最简单的。

最好,谢谢,
萨米

jquery node.js web-scraping jquery-selectors
1个回答
1
投票

可以使用.siblings()方法来遍历td元素。

参见:http://api.jquery.com/siblings/ 您还可以使用 JQuery 获取所有 td 元素,该元素将返回一个数组并使用您提到的索引。

选择器应该是这样的:

var tds= $('.search-results tr td');

这将获取表中的所有 td,因此您必须乘以列数。

var trs = $('.search-results tr');

请记住,第一列包含标题,而这些标题不在 tds 变量中。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.