【问题标题】:Web Scraping with Javascript?使用 Javascript 进行网页抓取?
【发布时间】:2018-05-05 09:11:56
【问题描述】:

我很难弄清楚如何抓取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),但我不知道 node 是如何工作的。

var request = require("request");

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


我的问题是:是否有一种简单的 Javascript 方式(可能不涉及节点?)来抓取我想要获取的婚礼列表?或者也许是一个类似于我一步一步尝试做的教程?

如果有任何帮助或建议,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我认为您唯一的问题是 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'
              }
        },
    

    我现在实际上无法测试这个,但它应该可以工作!

    【讨论】:

      【解决方案2】:

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

      require 是 Node 的导入包的方式,不是由浏览器定义的,require.js 是一个用于需要包的 javascript 库,但它的工作方式与 Node 的 require 函数不同。

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

      • npm install request --save
      • npm install cheerio --save

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

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

      【讨论】:

      • 我可能需要一个 Node.js 教程才能开始。感谢您的回答!
      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 2020-11-07
      • 2018-02-06
      • 2017-06-23
      • 2011-03-13
      • 2019-04-06
      • 2019-06-23
      • 2011-10-21
      相关资源
      最近更新 更多