美文网首页
nodejs通过动态代理爬取招聘网数据

nodejs通过动态代理爬取招聘网数据

作者: SunY7 | 来源:发表于2023-04-17 16:23 被阅读0次

    关于爬虫,主流技术是用python,然而随着node的出现,那些对python了解有限的前端同学,用node来实现一个爬虫也不失为一个不错的选择。
    当然无论是python爬虫还是node爬虫或其他语言,其实语言特性之外,其思路基本大同小异。下面我就为大家详细介绍下node爬虫的具体思路与实现,内容大概如下。
    既然要写爬虫,当然要爬一些利益相关的数据比较有意义。爬取招聘网站的招聘信息,来看看互联网圈子里各个工种的目前薪酬状况及其发展前景,那就以拉钩网为数据来源。
    在爬取过程中我们需要进行并发控制,做过爬虫的都知道,爬虫的请求并发量是必须要做的,为什么要控制并发?

    1. 控制其爬取频率,以免没爬几个就网站被封IP了。
    2. 控制爬虫应用运行内存,不控制并发的话一下子处理N个请求,内存分分钟爆炸。
      但是就算再怎么控制并发量也是会中招的。


      1587401260-5ab66fac04048_fix732.png

    对于拉钩网这种反爬措施比较暴躁的网站来说,一个IP爬取太过频繁,被识别成机器爬虫几乎是不可避免的,这种情况最直接的办法就是更换ip,特别需要的是优质爬虫代理ip,以下就是更换了优质爬虫代理ip后的实现效果。
    const http = require("http");
    const url = require("url");

    // 要访问的目标页面
    const targetUrl = "https://www.lagou.com/";

    const urlParsed = url.parse(targetUrl);

    // 代理服务器(产品官网 www.16yun.cn)
    const proxyHost = "t.16yun.cn";
    const proxyPort = "36600";

    // 生成一个随机 proxy tunnel
    var seed = 1;
    function random() {
    var x = Math.sin(seed++) * 10000;
    return x - Math.floor(x);
    }
    const tunnel = random()*100;

    // 代理验证信息
    const proxyUser = "16JDLSAS";
    const proxyPass = "457890";

    const base64 = new Buffer.from(proxyUser + ":" + proxyPass).toString("base64");

    const options = {
    host: proxyHost,
    port: proxyPort,
    path: targetUrl,
    method: "GET",
    headers: {
    "Host": urlParsed.hostname,
    "Proxy-Tunnel": tunnel,
    "Proxy-Authorization" : "Basic " + base64
    }
    };

    http.request(options, function (res) {
    console.log("got response: " + res.statusCode);
    res.pipe(process.stdout);
    }).on("error", function (err) {
    console.log(err);
    }).end();

    相关文章

      网友评论

          本文标题:nodejs通过动态代理爬取招聘网数据

          本文链接:https://www.haomeiwen.com/subject/rzscjdtx.html