javascript - 使用 Node.js + Cheerio 进行抓取 - 重复,选择器内的选择器会创建重复的返回

标签 javascript node.js web-scraping cheerio

情况是这样的。我正在使用 Node.js 和 Cheerio 我的控制台日志返回很好,除了站点结构导致的一些重复内容...

我的脚本:

var request = require ('request'),
    cheerio = require('cheerio'),
    chart = [];                              

request('http://www.website-X.com', function(err, resp, body){
    if(!err && resp.statusCode == 200){
        var $ = cheerio.load(body);
                $('tr', '#chart_body').each(function(){
                    var rank = $(this).text().trim().replace(/\s\s+/g, ';');
                    chart.push(rank);
        });
        console.log(chart);                             
    }
});
<小时/>

网站结构(简化):

                    <table id="chart_body">
                        <tr><!-- 1 Info I need --></td>
                        <tr><!-- 2 Info I need --></td>
                            <table>
                                <tbody>
                                    <tr> Duplicate info as 1  </tr>
                                </tbody>
                            </table>
                        <tr><!-- 3 Info I need --></td>
                        <tr><!-- 4 Info I need --></td>
                        <tr><!-- 5 Info I need --></td>
                        <tr><!-- 6 Info I need --></td>
                    </table>
<小时/>

我的控制台日志返回:

'1;Wolfenstein;330,703;330,703;1',
  'Wolfenstein',
'2;Wolfenstein;188,200;188,200;1',
  'Wolfenstein',
'3;Minecraft;126,041;215,109;2',
  'Minecraft','
<小时/>

除了重复的内容之外,我的控制台日志返回正常。这是因为在站点结构中选择器 tr 中有另一个 tr。我无法摆脱“tr tr”。 tr 也没有独特的类可供进一步选择。

请帮忙。 谢谢!!! -奥尔多

哦,最后...每次返回的开头和结尾都有令人讨厌的单引号。我拿不出来。

最佳答案

如果 tr 行始终重复,则只能选择奇数行:

$('tr', '#chart_body').odd()

使用 this answer. 中的函数

关于javascript - 使用 Node.js + Cheerio 进行抓取 - 重复,选择器内的选择器会创建重复的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001438/

相关文章:

javascript - 如何清除angularjs中的$timeout

javascript - 参数分隔符的正则表达式帮助

javascript - Windows 7 专业版上的 "Fatal error: Unable to find local grunt."

node.js - Azure linux上的Git推送 Node js失败,kudu想要运行dotnet命令

node.js - 为什么要将 Local<Value>::New 与 String::New() 一起使用

java - Android应用程序,如何登录网站并显示信息?

javascript - 如何模拟自动对焦

javascript - JQuery 颜色甚至 div

python - 使用 Python 抓取数据点

python - 修改 selenium python 绑定(bind)中的语言选项时遇到问题