zoukankan      html  css  js  c++  java
  • node爬虫

    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

  • 相关阅读:
    JVM、GC与HashMap
    自己用到的相关Linux命令,谨以记录
    HashMap
    Groovy简洁开发,我用到的简洁之处
    java,大数据批量插入、更新
    JDBC远程从一个MySql数据库中的一张表里面读出数据(这个数据库需要用SSH隧道连接,大约8W条数据),然后分别插入到另一个数据库中的两张表里
    maven安装 maven上传jar包到库里面
    关于java中是引用传递还是值传递的问题
    SQL优化
    servlet生命周期与工作原理
  • 原文地址:https://www.cnblogs.com/zhaowinter/p/6434442.html
Copyright © 2011-2022 走看看