使用cheerio js进行webscraping时获取其他信息

时间:2015-06-14 11:11:34

标签: node.js cheerio

我正在使用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种不同的长度。我相信有一个解决方法。但是,我无法弄清楚这一点。

有没有人对此事有任何了解?

2 个答案:

答案 0 :(得分:1)

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

用于生成表格的数据在页面源中存储为Javascript,位于名为tbldata的变量中(参见this gist)。

两种可能的解决方案:

  • 使用类似PhantomJS的内容来加载页面,该页面也将在页面上运行任何JS。之后,您可以使用DOM并使用Cheerio解析它;
  • 直接从嵌入式Javascript中删除表数据。

答案 1 :(得分:0)

Robert klep是正确的我试图刮掉D​​ataTables。我发现尽管cheerio使用了jquery但它确实访问了幻像js中的数据表。我最终使用了一个非常基本的库节点 - 幻像 - 简单。 Node幻影简单适用于jQuery,并且具有基本但直接的示例。

我能够将节点幻像简单化,然后运行nodemon来进行刮擦。

节点幻像简单访问,无需用户在命令行上调用phantomjs。