【发布时间】:2017-06-30 13:15:11
【问题描述】:
我看过很多网页抓取教程,但我找不到使用子页面抓取网页的模式。
这是顺序
- 抓取第一页以查找多个 URL
- 转到每个网址,找到几个网址
- 转到另一层网址,从表格中读取内容
我可以找到许多教如何执行第 1 步的 URL。但再往下看,我找不到任何好的示例。此外,我尝试了 X-ray,但效果不佳,因为我的 URL 是父项的一部分。
这里是一些示例代码:
var request = require('request');
var cheerio = require('cheerio');
var url = 'https://news.ycombinator.com';
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
// Obtain the URL of the news
var a = $(this).prev();
var subUrl = a.attr('href');
// Go to that news and obtain the title
request(subUrl, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var title = $("title").text();
console.log(title);
}
});
});
}
});
但是cheerios each 应该按顺序运行。有什么方法可以并行抓取页面吗?
感谢您的帮助
【问题讨论】:
-
对我来说这看起来像是一个递归函数。您可以通过将 URL 推送到堆栈并在
while循环中使用它们直到堆栈为空来模拟它。 -
@LaurIvan 我已经更新了我的问题,感谢您的宝贵时间。希望此更改可以帮助您了解我面临的问题。谢谢。
标签: node.js web-scraping cheerio x-ray