爬虫找到了数据端口,怎么爬取下一页的信息???
发布于 9 个月前 作者 Jackzhangpan 1298 次浏览 来自 问答

我要爬取这个 升学网,一些信息。找到了数据端口,但是在爬取下一页是怎么把学校列表放在同一个列表里面???并且怎么写到一个方法里???求大神帮忙。。。

6 回复

var request=require(‘request’); var cheerio=require(‘cheerio’); var url =‘http://shuju.sxw100.com/search/listUniversity.json?areaCode=-1&categoryCode=-1&administrationCode=&natureCode=1&orderType=&pinYin=&name=&pageNumber=1&pageSize=10&_=1499671138096’;

var i=0;

//读取下一页的信息 抓取6页
for(j=1;j<=6;j++){ var s = url.match(/pageNumber=(\d+)/); //下一页URL var nextUrl = url.replace(/pageNumber=(\d+)/,‘pageNumber=’+j); //调用crawler函数 crawler(nextUrl,function (err,listUniversity2) { if (err) return callback(err); callback(null,listUniversity.concat.(listUniversity2)); }) }

exports.crawler=function(url,callback) { request(url,function (err,res) { if (err) return console.error(err); // json对象 var obj=JSON.parse(res.body.toString()); //获取list列表 var list=obj.list; var $=cheerio.load(list); //定义学校列表 var listUniversity=[]; $(’.academy’).each(function () { var $me=$(this); var title=$me.find(’.academy-name’).find(‘h2’).text(); var location=$me.find(’.academy-name’).find(‘em’).text(); var item={ title:title, location:location, i:i+=1 } listUniversity.push(item); }) console.log(listUniversity) }); }

我参考的是这个爬虫教程。。。。。。。node 刚接触时间不长,求大神修改下代码。。 网络爬虫与数据库操作

var request = require('request');
var cheerio = require('cheerio');
var url = 'http://shuju.sxw100.com/search/listUniversity.json?areaCode=-1&categoryCode=-1&administrationCode=&natureCode=1&orderType=&pinYin=&name=&pageSize=10&_=1499671138096';

(async function() {

    var page = 0,
        result = [];
    while (page++ < 6) {
        result = result.concat(await new Promise((resolve, reject) => {
            console.log(page);
            request(`${url}&pageNumber=${page}`, function(err, res) {
                if (err) {
                    resolve([]);
                    return console.error(err);
                }
                // json对象
                var obj = JSON.parse(res.body.toString());
                //获取list列表
                var list = obj.list.join("");
                var $ = cheerio.load(list);
                //定义学校列表
                var listUniversity = [];
                $('.academy').each(function(i, e) {
                    var $me = $(e);
                    listUniversity.push({
                        title: $me.find('.academy-name').find('h2').text(),
                        location: $me.find('.academy-name').find('em').text(),
                        i: i += 1
                    });

                })
                resolve(listUniversity);
            });

        }))
    };
    return result;
})().then(result => {
    console.dir(result);
});

U3I9PNQA7N8(UO25IK~EEC2.png

我运行代码,出现错误,怎么解决??@godghdai

@Jackzhangpan node版本有点低,不支持async,换下面这种写法试试

var request = require('request');
var cheerio = require('cheerio');
var url = 'http://shuju.sxw100.com/search/listUniversity.json?areaCode=-1&categoryCode=-1&administrationCode=&natureCode=1&orderType=&pinYin=&name=&pageSize=10&_=1499671138096';

Promise.all(((pages) => {
    let range = [];
    while (pages--) range.unshift(pages + 1);
    return range;
})(6).map(page => {
    return new Promise((resolve, reject) => {
        request(`${url}&pageNumber=${page}`, function(err, res) {
            if (err) {
                resolve([]);
                return console.error(err);
            }
            // json对象
            var obj = JSON.parse(res.body.toString());
            //获取list列表
            var list = obj.list.join("");
            var $ = cheerio.load(list);
            //定义学校列表
            var listUniversity = [];
            $('.academy').each(function(i, e) {
                var $me = $(e);
                listUniversity.push({
                    title: $me.find('.academy-name').find('h2').text(),
                    location: $me.find('.academy-name').find('em').text(),
                    i: i += 1
                });

            })
            resolve(listUniversity);
        });
    })

})).then(datas => {
    console.dir(datas.reduce((result, value) => {
        return result = result.concat(value);
    }, []));
});


@godghdai ok了,非常感谢大神帮忙,谢谢

回到顶部