网络抓取 Cheerio 中的 HTML table
Web scraping an HTML table in Cheerio
我的网页抓取项目有问题。这是我需要抓取的页面示例:
<table style="position...">
<thead>..</thead>
<tbody id="leaderboard_body">
<tr bgcolor="#155555">..</tr>
<tr bgcolor="#155555">..</tr>
<tr bgcolor="#155555">..</tr>
...
</tbody>
</table>
有关更多详细信息,请访问以下页面:World Leaderboards
我想访问 tr 标签中的信息,但无法实现。我找不到像这样简单代码的tbody标签,我也不知道为什么:
var cheerio = require("cheerio");
var url = "http://www.dota2.com/leaderboards/?l=french#europe";
var http = require("http");
// Utility function that downloads a URL and invokes
// callback with the data.
function download(url, callback) {
http.get(url, function(res) {
var data = "";
res.on('data', function (chunk) {
data += chunk;
});
res.on("end", function() {
callback(data);
});
}).on("error", function() {
callback(null);
});
}
download(url, function(data) {
if (data) {
var $ = cheerio.load(data);
var content = $('tbody').text();
console.log(content);
}
else
console.log(err);
});
那是因为table不存在于HTML中,它是在页面加载后用javascript插入的,无法通过传统方式抓取。
始终查看源代码,而不仅仅是控制台中的实时视图。
只做最少的研究表明 table 是从 JSON 构建的,它是通过
的请求获得的
http://www.dota2.com/webapi/ILeaderboard/GetDivisionLeaderboard/v0001?division=europe
你已经拥有了所有你需要的预格式化和准备好的数据,而无需抓取 HTML
我的网页抓取项目有问题。这是我需要抓取的页面示例:
<table style="position...">
<thead>..</thead>
<tbody id="leaderboard_body">
<tr bgcolor="#155555">..</tr>
<tr bgcolor="#155555">..</tr>
<tr bgcolor="#155555">..</tr>
...
</tbody>
</table>
有关更多详细信息,请访问以下页面:World Leaderboards
我想访问 tr 标签中的信息,但无法实现。我找不到像这样简单代码的tbody标签,我也不知道为什么:
var cheerio = require("cheerio");
var url = "http://www.dota2.com/leaderboards/?l=french#europe";
var http = require("http");
// Utility function that downloads a URL and invokes
// callback with the data.
function download(url, callback) {
http.get(url, function(res) {
var data = "";
res.on('data', function (chunk) {
data += chunk;
});
res.on("end", function() {
callback(data);
});
}).on("error", function() {
callback(null);
});
}
download(url, function(data) {
if (data) {
var $ = cheerio.load(data);
var content = $('tbody').text();
console.log(content);
}
else
console.log(err);
});
那是因为table不存在于HTML中,它是在页面加载后用javascript插入的,无法通过传统方式抓取。
始终查看源代码,而不仅仅是控制台中的实时视图。
只做最少的研究表明 table 是从 JSON 构建的,它是通过
的请求获得的http://www.dota2.com/webapi/ILeaderboard/GetDivisionLeaderboard/v0001?division=europe
你已经拥有了所有你需要的预格式化和准备好的数据,而无需抓取 HTML