使用 cheerio js 进行网页抓取时获取额外信息
getting back additional info when webscraping with cheerio js
我正在与 cheerio.js 合作制作一个简单的网络抓取工具。出于某种原因,它不响应某些 html 标签。
我无法定位的 div 是 div 和 'dataTables_scrollBody' 的 class
在我正在抓取的网站上: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 种不同的长度。我相信有一个解决方法。但是,我无法弄清楚这一点。
有没有人知道这件事?
DataTables 是一个 Javascript 库,它动态创建、插入和修改 DOM 中的 HTML 元素,after 页面加载。您要抓取的 table 是动态创建的,但您的抓取器仅适用于静态 HTML。
用于生成 table 的数据在页面源中存储为 Javascript,在一个名为 tbldata
的变量中(参见 this gist)。
两种可能的解决方案:
- 使用类似 PhantomJS 的方式加载页面,这也会 运行 页面上的任何 JS。之后,您可以获取 DOM 并使用 Cheerio 解析它;
- 直接从嵌入的 Javascript 中抓取 table 数据。
Robert klep 是正确的,我试图抓取数据表。我发现虽然 cheerio 使用 jquery,但它确实访问了 phantom js 内部的数据 table。我最终使用了一个非常基本的库 node-phantom-simple。 Node phantom simple 与 jQuery 配合使用效果很好,并且有基本但直接的示例。
我能够要求 node phantom simple 然后 运行 nodemon 来完成我的抓取。
Node phantom 简单访问,不需要用户在命令行调用phantomjs。
我正在与 cheerio.js 合作制作一个简单的网络抓取工具。出于某种原因,它不响应某些 html 标签。 我无法定位的 div 是 div 和 'dataTables_scrollBody' 的 class 在我正在抓取的网站上: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 种不同的长度。我相信有一个解决方法。但是,我无法弄清楚这一点。
有没有人知道这件事?
DataTables 是一个 Javascript 库,它动态创建、插入和修改 DOM 中的 HTML 元素,after 页面加载。您要抓取的 table 是动态创建的,但您的抓取器仅适用于静态 HTML。
用于生成 table 的数据在页面源中存储为 Javascript,在一个名为 tbldata
的变量中(参见 this gist)。
两种可能的解决方案:
- 使用类似 PhantomJS 的方式加载页面,这也会 运行 页面上的任何 JS。之后,您可以获取 DOM 并使用 Cheerio 解析它;
- 直接从嵌入的 Javascript 中抓取 table 数据。
Robert klep 是正确的,我试图抓取数据表。我发现虽然 cheerio 使用 jquery,但它确实访问了 phantom js 内部的数据 table。我最终使用了一个非常基本的库 node-phantom-simple。 Node phantom simple 与 jQuery 配合使用效果很好,并且有基本但直接的示例。
我能够要求 node phantom simple 然后 运行 nodemon 来完成我的抓取。
Node phantom 简单访问,不需要用户在命令行调用phantomjs。