博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node爬虫
阅读量:6995 次
发布时间:2019-06-27

本文共 2398 字,大约阅读时间需要 7 分钟。

node爬虫项目的总结

用到的包

  • request: 发送http请求;

  • cheerio: 后端jquery;

  • iconv: 转变字符集格式;

  • cron: 定时任务;

爬取utf8页面

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() )       // 百度一下    }});

爬取gbk页面

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() ) // 汽车    }})

爬取时伪造浏览器useragent以及请求头信息;

上面爬取网页页面其实会提示访问受限制,然后跑到上面这个受限制页面;是因为没有伪造浏览器头部信息

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() )       // 百度一下    }});

爬取页面需要带cookie信息怎么办?

方法一: 先模拟登录发送一个请求,从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());        })    })

动态修改ip

转载于:https://www.cnblogs.com/zhaowinter/p/6434442.html

你可能感兴趣的文章