网页刮刮Javascript?

时间:2018-05-05 09:11:56

标签: javascript node.js web-scraping web-crawler

我很难弄清楚如何抓住this webpage将这个婚礼清单放入我的收银机中。一开始看起来并不复杂,但是当我进入代码时,我无法获得任何结果。

我已经尝试了ygrab.js,这很简单并且把我带到了某个地方但是我似乎无法抓住图像而只会在控制台中输出输出(没有多少文档记录到继续)。

$(function() {
var $listResult = $('#list-result');
var kado = [];
var data = [
{
    url: 'https://www.kadolog.com/fr/list/liste-de-mariage-laura-julien',
    selector: '.kado-not-full',
    loop: true,
    result: [{
              name: 'photo', 
              find: '.views-field-field-photo',
              grab: {
                by: 'attr',
                value: 'src'
              }
             },
            {
            name: 'title',
            find: '.views-field-title .field-content',
            grab: {
                by: 'text',
                value: ''
            }
        },
        {
            name: 'description',
            find: '.views-field-body .field-content',
            grab: {
                by: 'text',
                value: ''
            }
        },
        {
            name: 'price',
            find: '.price',
            grab: {
                by: 'text',
                value: ''
            }
        },
        {
            name: 'remaining',
            find: '.topinfo',
            grab: {
                by: 'text',
                value: ''
            }
        },
        {
            name: 'link',
            find: '.views-field-nothing .field-content .btn',
            grab: {
                by: 'attr',
                value: 'href'
            }
        },
    ],
  },
];
ygrab(data, function(result){
 console.log(JSON.stringify(result, null, 2)); //photos = undefined
});

然后是带有Request和Cheerio的Node.js(我也尝试过Crawler),但我不知道节点是如何工作的。

var request = require("request");

这在控制台中给出了一个错误,指出未定义require。很公平,我在我的页面中的脚本中添加了require.js。我收到了另一个错误("未捕获错误:匿名定义()模块不匹配:...")。

我的问题是:是否有一种简单的Javascript方式(可能没有涉及节点?),刮掉我试图获得的婚礼清单?或者也许是一个类似于我试图一步一步做的教程?

我真的很感激任何帮助或建议。

2 个答案:

答案 0 :(得分:0)

我认为你唯一的问题是img选择器。 改变

    {
          name: 'photo', 
          find: '.views-field-field-photo',
          grab: {
            by: 'attr',
            value: 'src'
          }
    },

到此

   {
          name: 'photo', 
          find: '.views-field-field-photo .field-content img',
          grab: {
            by: 'attr',
            value: 'src'
          }
    },

我实际上现在无法对此进行测试,但它应该正常工作!!

答案 1 :(得分:0)

Node.js是一个单独的应用程序,它独立于网页执行javascript。

require是Node导入包的方式,并不是由浏览器定义的,require.js是一个需要包的javascript库,但它的工作方式与Node的{{1}不同。 1}}功能。

要使用请求和cheerio,您需要从here安装Node.js,然后使用以下命令安装request和cheerio:

  • require
  • npm install request --save

然后,您在该目录中使用Node.js编写的任何代码都可以访问模块。

Here's a tutorial to web scraping in Node.js with cheerio.