我正在使用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种不同的长度。我相信有一个解决方法。但是,我无法弄清楚这一点。
有没有人对此事有任何了解?
答案 0 :(得分:1)
DataTables是一个Javascript库,可以在加载页面后动态创建,插入和修改DOM中的HTML元素。您要抓取的表是动态创建的,但您的scraper仅适用于静态HTML。
用于生成表格的数据在页面源中存储为Javascript,位于名为tbldata
的变量中(参见this gist)。
两种可能的解决方案:
答案 1 :(得分:0)
Robert klep是正确的我试图刮掉DataTables。我发现尽管cheerio使用了jquery但它确实访问了幻像js中的数据表。我最终使用了一个非常基本的库节点 - 幻像 - 简单。 Node幻影简单适用于jQuery,并且具有基本但直接的示例。
我能够将节点幻像简单化,然后运行nodemon来进行刮擦。
节点幻像简单访问,无需用户在命令行上调用phantomjs。