在网上看了几个node.js写的爬虫,嗯。。。。。还是自己写一个简单的点的把,就爬下文章,图片这些。爬取对象,是我是我以前做的一个网站。。。
需要用到的是node.js的第三方模块是。。
request,cheerio,如果用自带的http也行,只是觉得代码太多。
先npm install这两个模块吧
然后来看下主要代码架构
request(url, (error, response, body) => {
if (error) {
console.log(error)
} else {
//request模块请求到的body如果打印出来就是html页面代码,而http请求到的打印出来是一丢数字代码。
$ = cheerio.load(body); //这句话就是。。。嗯。。。可以用类似jq的语法去操作你请求到的body了;
var title = $(".pd-detail h2").text().replace(/\"/ig, " ");//取到文章标题
var article = $(".ft5").text();//取到文章内容;
//然后存起来
fs.writeFile("./data/" + title + ".txt", article, (error) => {
if (error) {
console.log(error);
}
})
//图片也是取了存起来
var images = $(".ft5 img");
images.each(function () {
var img_filename = $(this).attr("alt");
var img_src = $(this).attr("src");
request(img_src).pipe(
fs.createWriteStream("./image/" + img_filename)
); //
})
}
这样这篇文章的东西就被爬下来了,然后你想爬很多,改改代码呗,下面贴出全部代码
var request = require("request");
var fs = require("fs");
var url =
"http://lj.scu.edu.cn/cdwxxy1.2/index.php?app=default&act=article_view&id=0006BF5AE9ADB13D2EC36BBF60C79BDF&cate_id=C87B31A5B538412CFCAA01570A8645D8";
var cheerio = require("cheerio");
var i = 0;
function pc() {
request(url, (error, response, body) => {
if (error) {
console.log(error)
} else {
i = i + 1;
$ = cheerio.load(body);
var title = $(".pd-detail h2").text().replace(/\"/ig, " ");
var article = $(".ft5").text();
var nextLink = $(".fz.red.am-padding-left-xs").attr("href");
fs.writeFile("./data/" + title + ".txt", article, (error) => {
if (error) {
console.log(error);
}
})
var images = $(".ft5 img");
images.each(function () {
var img_filename = $(this).attr("alt");
var img_src = $(this).attr("src");
request(img_src).pipe(
fs.createWriteStream("./image/" + img_filename)
); //
})
console.log(i);
if (i < 30) {
url = nextLink;
pc();
}
}
})
}
pc()
文件目录贴个图
在node里面,先进入文件夹根目录执行node index
嗯,然后你的data和image里面就慢慢的有东西了。