【问题标题】:Cannot get specific div option无法获取特定的 div 选项
【发布时间】:2018-09-08 20:22:36
【问题描述】:

我正在构建一个非常简单的抓取工具,它应该会获取此 website 上所有可用的国家/地区。国家/地区可在“国内俱乐部”下拉菜单中找到。

就国家而言,我正在使用Nodejscheerio(我不知道那个库是否是一个不错的选择,我是一个非常初学者)。

这是我的代码:

const request = require('request');

var cheerio = require('cheerio');
var cheerioAdv = require('cheerio-advanced-selectors');

request('https://uk.soccerway.com/', function(err, resp, html)
{
  if (!err)
  {
    const $ = cheerio.load(html);

    var countriesMenu = cheerioAdv.find($, '#navbar-left > div:eq(2)');

    $(countriesMenu).each(function()
    {
      console.log($(this).val());
    });
  }
});

基本上我声明了一个名为request 的常量,它执行所有请求GET。然后我声明了另外两个变量,一个包含库cheerio,另一个名为cheerioAdv,应该允许我完成这项任务。

cheerio advanced selector 应该允许我访问特定的标签位置。

基于该解释,我保存了 navbar-left 第二个 div 的内容,其中包含我想要的所有选项国家/地区。

当我使用以下命令启动脚本时:node app.js 没有打印任何内容。我也试过在eq(2)后面加options,我做错了什么?

【问题讨论】:

  • 我觉得eq应该这样使用github.com/cheeriojs/cheerio#eq-i-
  • @null 我尝试使用var countriesMenu = $('#navbar-left > div option').eq(1); 没有迭代..
  • 试试$('#navbar-left').eq(1),看看你会得到什么。
  • 您需要“查看源代码”才能看到真正存在的内容,如果您经过检查员,您将看到与 Cheerio 看到的不同的东西。

标签: jquery node.js cheerio


【解决方案1】:

request 模块实际上并不包含#navbar-left。如果您尝试console.log(html),您会注意到 html 数据有点奇怪。这是因为 request 模块只能渲染初始的 html 正文,而不能渲染 ajax 或 react/angular 等 javascript 数据。尝试使用request以外的其他模块。也许改用无头浏览器。 Nightmare 很棒。

npm install nightmare --save

您使用 nightmare 实例拨打电话,然后将 html 代码传递给您的cheerio。这是示例:

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })
const cheerio = require('cheerio');

nightmare
    .goto(url)

    //do something in the chain to go to your desired page.

   .evaluate(() => document.querySelector('html').outerHTML) // html selector

   .then(function (html) {
      cheerio.load(html);
      // DO SOMETHING IN CHEERIO HERE

    )
    .catch(function (error) {
    console.error('Error:', error);
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多