CNode

关于Node.js编写爬虫获取特殊的URL的问题。

问答
Nnodevc发布于12 年前最后回复9 年前9 回复10222 浏览0 收藏

第一次使用node.js编写爬虫,希望爬虫能够爬取一个页面上的所有链接。

看了论坛的一些文章,尝试了以下方法: 一、使用request和cheerio模块,解析dom树来获取URL。 二、使用正则匹配来获取url。

但是这些方法遇到一些特殊的情况,比如ajax或者javascript代码时产生的url就没有办法了。比如有一个链接,需要用户点击一个按钮,才能生成链接等各种情况。请各位帮帮忙,看看有没有这些方面的模块或者方法。

另:附上爬虫实际测试的测试地址:http://demo.aisec.cn/demo/aisec/。爬虫希望能够爬取到上面的所有链接。请各位不吝赐教!

查看回复

回复 (9)

N
nnabuuu#1·12 年前

这种用phantom.js就好了嘛。。。 我记得phantom.js已经可以集成到node.js里面了

A
asfman#2·12 年前

phantom没有集成到node.js吧,还是要单独装phantom.js的吧,装好后,npm install spooky,可以去github看看spooky怎么使用 try { var Spooky = require('spooky'); var spooky = new Spooky({ child: { transport: 'http' }, casper: { pageSettings: { loadImages: false, loadPlugins: false }, verbose: false } }, function (err) { if (err) { e = new Error('Failed to initialize SpookyJS'); e.details = err; throw e; }

		        spooky.start(fetchUrl);
				spooky.on('html', function (doc) {

					//console.log(doc.url);//最终抓取的url
					var cheerio = require('cheerio');
					var $ = cheerio.load(doc.html);
					var product = {};
					//todo
					res.json(product);
				});
		        spooky.then(function () {

					this.emit('html', this.evaluate(function () {

						return {
							url: location.href,
							html: document.querySelector('html').outerHTML
						};
					}));
		        });
		        spooky.run();
		});

		spooky.on('error', function (e, stack) {
		    res.status(500).json({error: (stack?JSON.stringify(stack):"spooky error")});
		});	
N
nodevc#3·12 年前
引用 asfmanphantom没有集成到node.js吧,还是要单独装phantom.js的吧,装好后,npm install spooky,可以去github看看spooky怎么使用 try { var S...

@asfman 我安装好了三个库,phantomjs,casperjs,spooky,然后运行spooky里的example目录下的hello.js。程序报错了。我是在windows下运行的。安装三个库都是用的npm。 报错如下:

events.js:72 throw er; // Unhandled 'error' event ^ Error: spawn ENOENT at errnoException (child_process.js:1011:11) at Process.ChildProcess._handle.onexit (child_process.js:802:34)

不知道是什么原因?

N
nnabuuu#4·12 年前

@asfman 有一些非官方的解决方法,看起来是会损失一些性能,不过用用应该没事。

https://github.com/sgentle/phantomjs-node

D
DavidCai1993#5·11 年前

遇到了和三楼同样的情况 events.js:85 throw er; // Unhandled 'error' event ^ Error: spawn casperjs ENOENT

E
efishocean#6·11 年前

这方面的文档不好找啊

C
clearbug#7·11 年前

你那demo是爬虫吗?反正我是没看懂

H
hyq1860#8·11 年前

nightmare,谁用谁说好

J
juneLLL#9·9 年前
引用 hyq1860nightmare,谁用谁说好

@hyq1860 有没有中文文档或者是例子给推荐呀大神

参与回复
登录后即可参与回复。登录