nodejsを使って、蘇州と上海のネットの職務情報を取得します.
12305 ワード
最近仕事を探し始めました.蘇州で何軒か会っても結果がなくてとても悲しいです.フックでは都市蘇州のキーワードによって検索します.NETは全部で80ぐらいの職です.給料を使って濾過しますと、ほとんど投げられないです.それに、最近の蘇州の住宅価格はぐずぐずしていて、住宅ローンの圧力もとても大きいので、上海に行きたいです.暇な時に小さな爬虫類を書いて、蘇州と上海のNETのポストの情報を下に登って、簡単に比較しました.
はい、弟が得意です.NETはどうしてnodejsを使いますか?先日、ある会社がチャンスを与えてくれたので、私はトレーナーに使いましたが、その後も風呂に入りました.でも、二泊で書き終わりました.ちょうど学んで、コードの醜さは軽く噴きます!
一:どうやって指切りのデータを取るか?
これはとても简単です.正规で分析するつもりでしたが、ajaxのインターフェースをチェックして、直接httpでアクセスできます.神器ChromeのF 12を開けて見ればわかる.
これはnodejsでページ別要求をシミュレートするコードです.
チェックの分かれ目がJsonオブジェクトに戻るなら、当然、mongoDbを保存するのが一番簡単です.
下はmongoDbのパッケージです.
nodejsが持参したhttp Serverを使って、要請を受けたら直接にファイルを読み込んで、比較した情報をhtmlテキストに記入して、h 5のチャートで展示します.
以下はサーバのコードです.
統計は0-5 k、5-10 k、10-15 k、15-20 k、20-25 k、25 kのこれらの区間によって職位の数量によって統計します.
0-5 k:上海は蘇州の4倍です.
5-10 k:上海は蘇州の4倍です.
10-15 k:上海は蘇州の9倍です.
15-20 k:上海は蘇州の12倍です.
20-25 k:上海は蘇州の17倍です.
>25 k:上海は蘇州の26倍です.
10-15 kから始まる職位が見られます.上海の数は蘇州の10倍以上で、高給の職位がもっと高いです.ここから見ると、蘇州と上海の差はまだ大きいです.苏州政府はずっとうぬぼれています.自分はインターネットのサークルで多くの牛に迫られて孵化器を作ったと思いますが、手を出した会社はいくつありますか?片手で数えてきました.
私も故郷を離れて上海の未来を探しに行きます.
まだマスターしていません.VSコードをgithubにアップロードします.直接コードをアップロードしてください.lagou Spider.zip
はい、弟が得意です.NETはどうしてnodejsを使いますか?先日、ある会社がチャンスを与えてくれたので、私はトレーナーに使いましたが、その後も風呂に入りました.でも、二泊で書き終わりました.ちょうど学んで、コードの醜さは軽く噴きます!
一:どうやって指切りのデータを取るか?
これはとても简単です.正规で分析するつもりでしたが、ajaxのインターフェースをチェックして、直接httpでアクセスできます.神器ChromeのF 12を開けて見ればわかる.
これはnodejsでページ別要求をシミュレートするコードです.
var getData = function (kd,city,pn) {
var mongo = require('./mongo');
var http = require('http');
var queryString = require('querystring');
var postData=queryString.stringify({
'pn':pn,
'kd':kd,
'first':false
});
var options = {
hostname:'www.lagou.com',
method:'POST',
path:'/jobs/positionAjax.json?px=default&city='+city,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
var postResult = '';
var req = http.request(options,(res)=>{
console.log(`STATUS:${res.statusCode}`);
res.setEncoding('utf8');
res.on('data',(chunk)=>{
postResult+=chunk;
});
res.on('end',()=>{
console.log(`RESULT:${postResult}`);
var jsonObj =JSON.parse(postResult);
//insert into db
jsonObj.content.result.forEach((item)=>{
var salary = item.salary;
// 3k-6k,
var arr = salary.split('-');
var min = arr[0].substring(0,arr[0].indexOf('k'));
var max = arr.length>1? arr[1].substring(0,arr[1].indexOf('k')):min;
item.salaryMin = parseInt(min);
item.salaryMax = parseInt(max);
mongo.save(city,item);
});
if(jsonObj.content.hasNextPage&&jsonObj.content.totalPageCount>pn){
getData(kd,city,pn+1);
}
});
req.on('error',(e)=>{
console.log(`problem with request:${e.message}`);
});
});
req.write(postData);
req.end();
console.log(`start to get data. pn:${pn} city:${city} kd:${kd}`);
};
exports.run = getData;
二:データはどこに保存しますか?チェックの分かれ目がJsonオブジェクトに戻るなら、当然、mongoDbを保存するのが一番簡単です.
下はmongoDbのパッケージです.
var save=function (city,jsonObj) {
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var db = new Db('test',new Server('localhost',27017))
db.open((err,db)=>{
var coll = db.collection(city);
coll.save(jsonObj,(err,r)=>{
if(!err){
console.log('save to '+city);
}
db.close();
});
});
};
var removeAll = function (city,callback) {
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var db = new Db('test',new Server('localhost',27017))
db.open((err,db)=>{
var coll = db.collection(city);
coll.remove((err,numOfRows)=>{
if(!err){
console.log(`${city} collection be removed. ${numOfRows}`);
}
db.close();
callback(err);
});
});
};
var readAll=function (city,callback) {
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var db = new Db('test',new Server('localhost',27017))
db.open((err,db)=>{
var coll = db.collection(city);
var cursor = coll.find();
cursor.toArray((err,results)=>{
if(!err){
callback(results);
//db.close();
}
db.close();
});
});
}
exports.save = save;
exports.removeAll = removeAll;
exports.readAll = readAll;
どのようにデータを展示しますか?nodejsが持参したhttp Serverを使って、要請を受けたら直接にファイルを読み込んで、比較した情報をhtmlテキストに記入して、h 5のチャートで展示します.
以下はサーバのコードです.
var http = require('http');
var fs = require('fs');
var stati = require('./statistics');
var szStati = {text:'SuZhou'};
var shStati = {text:'ShangHai'};
var server=new http.Server();
server.on('request',function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
fs.readFile('./index.html','utf8',(err,data)=>{
if (err) {
throw err;
}
console.log(data);
// res.write(data);
// res.end();
stati.statiSalary(' ',(results)=>{
szStati.values = results;
stati.statiSalary(' ',(results)=>{
shStati.values = results;
var series =[szStati,shStati];
var strSeries = JSON.stringify(series);
console.log(strSeries);
data = data.replace('@series',strSeries);
console.log(data);
res.write(data);
res.end();
});
});
});
});
server.listen(3000);
console.log('http server started...port:3000');
四:統計結果統計は0-5 k、5-10 k、10-15 k、15-20 k、20-25 k、25 kのこれらの区間によって職位の数量によって統計します.
0-5 k:上海は蘇州の4倍です.
5-10 k:上海は蘇州の4倍です.
10-15 k:上海は蘇州の9倍です.
15-20 k:上海は蘇州の12倍です.
20-25 k:上海は蘇州の17倍です.
>25 k:上海は蘇州の26倍です.
10-15 kから始まる職位が見られます.上海の数は蘇州の10倍以上で、高給の職位がもっと高いです.ここから見ると、蘇州と上海の差はまだ大きいです.苏州政府はずっとうぬぼれています.自分はインターネットのサークルで多くの牛に迫られて孵化器を作ったと思いますが、手を出した会社はいくつありますか?片手で数えてきました.
私も故郷を離れて上海の未来を探しに行きます.
まだマスターしていません.VSコードをgithubにアップロードします.直接コードをアップロードしてください.lagou Spider.zip