Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185361
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 836
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-27 14:41
个人简介

宁为玉碎,不为瓦全

文章分类
文章存档

2024年(26)

2023年(28)

2022年(17)

2021年(10)

2019年(1)

我的朋友

分类: IT业界

2023-04-18 16:40:45

关于爬虫,主流技术是用python,然而随着node的出现,那些对python了解有限的前端同学,用node来实现一个爬虫也不失为一个不错的选择。

当然无论是python爬虫还是node爬虫或其他语言,其实语言特性之外,其思路基本大同小异。下面我就为大家详细介绍下node爬虫的具体思路与实现,内容大概如下。

既然要写爬虫,当然要爬一些利益相关的数据比较有意义。爬取招聘网站的招聘信息,来看看互联网圈子里各个工种的目前薪酬状况及其发展前景,那就以拉钩网为数据来源。

在爬取过程中我们需要进行并发控制,做过爬虫的都知道,爬虫的请求并发量是必须要做的,为什么要控制并发?

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

但是就算再怎么控制并发量也是会中招的。

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


// 要访问的目标页面
const targetUrl = "";




const urlParsed = url.parse(targetUrl);


// 代理服务器(产品官网 )
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();



阅读(254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~