【问题标题】:getting back additional info when webscraping with cheerio js使用cheerio js进行网络抓取时获取更多信息
【发布时间】:2015-06-19 14:11:59
【问题描述】:

我正在使用cheerio.js 制作一个简单的网络爬虫。由于某种原因,它不响应某些 html 标签。 我无法定位的一个 div 是 “dataTables_scrollBody”类的 div 在我正在抓取的网站上:http://www.caffeineinformer.com/the-caffeine-database.

但是,我想我找到了解决问题的方法。

我通读了文档https://github.com/cheeriojs/cheerio 并遵循这种格式 $( selector, [context], [root]

$(".main, div:nth-child(3) ").filter(function(){
        var data = $(this).prev().text();
        console.log(data);
})

在我的控制台中,我得到了我想要的数据,但有两个问题

1.  Caffeine Content of Drinks All Coffee Soda Energy Drinks Tea Shots
    Loading data.../*<![CDATA[*/var totalrows=1127;
    var latestdate='06/12/2015';var tbldata=

我没有在页面上看到此信息。

2.  I am getting my data back two times.

我在 console.log 中输入了数据长度。我回来了 8 种不同的长度。我相信有一个解决方法。但是,我无法弄清楚这一点。

有人知道这件事吗?

【问题讨论】:

    标签: node.js cheerio


    【解决方案1】:

    DataTables 是一个 Javascript 库,它在页面加载后 在 DOM 中动态创建、插入和修改 HTML 元素。您要抓取的表格是动态创建的,但您的抓取器仅适用于静态 HTML。

    用于生成表格的数据以 Javascript 的形式存储在页面源中的一个名为 tbldata 的变量中(请参阅 this gist)。

    两种可能的解决方案:

    • 使用PhantomJS之类的东西来加载页面,这也将运行页面上的任何JS。之后,您可以获取 DOM 并使用 Cheerio 对其进行解析;
    • 直接从嵌入的 Javascript 中抓取表格数据。

    【讨论】:

    • 感谢您的反馈。我想不通。我已经用 phantom js 截屏了。我必须检查一下。
    【解决方案2】:

    Robert klep 是正确的,我试图抓取 DataTables。我发现虽然 Cheerio 使用了 jquery,但它确实访问了 phantom js 中的数据表。我最终使用了一个非常基本的库 node-phantom-simple。 Node phantom simple 可以很好地与 jQuery 配合使用,并且具有基本但直接的示例。

    我能够要求 node phantom simple 然后运行 ​​nodemon 来执行我的抓取。

    Node phantom 简单访问,无需用户在命令行调用 phantomjs。

    【讨论】:

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