node爬蟲項目的總結node
request: 發送http請求;jquery
cheerio: 後端jquery;ajax
iconv: 轉變字符集格式;後端
cron: 定時任務;瀏覽器
const request = require('request'); const cheerio = require('cheerio'); request('https://www.baidu.com/', function (error, response, body) { if (!error && response.statusCode == 200) { var $ = cheerio.load(body); console.log( $('#su').val() ) // 百度一下 } });
var options = { url: 'http://www.163.com/', encoding: null } request(options, function (error, response, body) { if (!error && response.statusCode == 200) { str = iconv.decode(body, 'gbk'); var $ = cheerio.load(str); console.log( $('#_link_auto').text() ) // 汽車 } })
上面爬取網頁頁面其實會提示訪問受限制,而後跑到上面這個受限制頁面;是由於沒有僞造瀏覽器頭部信息cookie
const iconv = require('iconv-lite'); var options = { url: 'http://www.163.com/', encoding: null, headers: { 'user-agent': 'xx', } } request(options, function (error, response, body) { if (!error && response.statusCode == 200) { str = iconv.decode(body, 'gbk'); console.log(str) // Show the HTML for the Google homepage. } })
// app.js; 起服務的頁面 const fork = require('child_process').fork; const CronJob = require('cron').CronJob; var job = new CronJob('5,10,15,20,25,30,35,40,45,50 * * * * *', function() { fork('crawl.js') }); job.start(); // crawl.js 子進程js; const request = require('request'); const cheerio = require('cheerio'); request('https://www.baidu.com/', function (error, response, body) { if (!error && response.statusCode == 200) { var $ = cheerio.load(body); console.log( $('#su').val() ) // 百度一下 } });
方法一: 先模擬登陸發送一個請求,從response的headers頭信息裏獲取到cookie信息,再向目標頁發送請求時帶上cookie信息便可;獲取表單提交data的key值方法:打開控制檯,勾選preserve log
,填寫表單信息後,點擊提交,當頁面跳轉的時候原先頁面的網絡信息依然存在,找到對應的請求,查看請求體便可。
方法二: 利用phantomjs模擬瀏覽器登陸行爲。網絡
var options = { url: '登陸發送的目標請求,能夠在ajax的url裏找到,也能夠在form表單的action裏獲取到', form: { account:'xxx', pwd:'xxx' } }; request.post(options,function(err,response) { console.log(response.headers['set-cookie']); var opt = { url: '目標請求', headers: { 'cookie': response.headers['set-cookie'] } } request(opt,function(error,res,body) { console.log(body.toString()); }) })