问题描述:目前我初学爬虫,尽管简单的数据能抓下来,但是看了很多文章,里面有提到一些反爬虫的机制的,这里面都提到了用ip来反爬虫,第二篇文章也提到了用代理池来避免,但是还是不大明白,这些代理ip如果用nodejs要怎么弄?

HTTP代理有很多提供商家,这里选择无忧代理的爬虫代理IP,链接 http://www.data5u.com/buy/dynamic.html

NodeJS整合代码如下:

/*** 请确保安装了request和bluebird两个模块* 安装模块:打开NODEJS-->输入npm install request-->输入npm install bluebird**/var request = require("request");
var Promise = require("bluebird");// 请填写无忧代理订单号
var order = 'please-input-your-order-here';
// 要测试的网址
var targetURL = 'http://ip.chinaz.com/getip.aspx';
// 请求超时时间
var timeout = 8000;
// 测试次数
var testTime = 5;
// 间隔多少毫秒调用一次接口
var sleepTime = 5000;var apiURL = 'http://api.ip.data5u.com/dynamic/get.html?order=' + order + '&sep=3';console.log('>>>> start test dynamic ip');function getProxyList() {return new Promise((resolve, reject) => {var options = {method: 'GET',url: apiURL,gzip: true,encoding: null,headers: {},};request(options, function (error, response, body) {try {if (error) throw error;var ret = (body + '').match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}/g);resolve(ret);} catch (e) {return reject(e);}});});
}function execute(){getProxyList().then(function (proxyList) {var targetOptions = {method: 'GET',url: targetURL,timeout: timeout,encoding: null,};proxyList.forEach(function (proxyurl) {console.log(`* testing `);var startTimestamp = (new Date()).valueOf();targetOptions.proxy = 'http://' + proxyurl;request(targetOptions, function (error, response, body) {try {if (error) throw error;body = body.toString();var endTimestamp = (new Date()).valueOf();console.log('  > time ' + (endTimestamp - startTimestamp) + 'ms ' + body);} catch (e) {console.error(e);}});});}).catch(e => {console.log(e);})
}// 定时执行
var interval = setInterval(function(){if(testTime > 0){execute()} else {clearInterval(interval);console.log('<<<< end test dynamic ip');}testTime = testTime - 1;
}, sleepTime);

知乎网友回答(https://www.zhihu.com/question/26804984)
根据个人经验,简单的反爬虫技术有:
1. 判断headers 中的参数,比如user-agent 不是浏览器的不允许访问;refer 不是来源于特定域名的也不行(反盗链常用技术)。这是最常见的反爬虫技术。

  1. cookies 检查用户cookies,需要登录的网站常采用这种技术。比如论坛、微博、雪球等。

以上两个可以通过手动设计headers 和cookies 搞定,python 程序员使用requests 可以很方便解决。

还有一些比较复杂的技术:
1. 数据通过ajax 返回后通过js 混淆处理,而js 处理过程可以写的很复杂,以至于爬虫程序员没法分析。
2. 数据通过flash 和服务器端交互。 例如船讯网www.shipxy.com 中请求船舶信息部分。
3. 通过ip 或者特定账号单位时间内请求数量来限制访问,基本无解,比如你爬爬 google scholar 试试看

无忧代理IP(http://www.data5u.com)原创文章,转载请注明出处。

nodejs怎么使用爬虫HTTP代理IP抓取数据相关推荐

  1. 爬虫篇——代理IP爬取备用及存储

    爬虫篇--代理IP爬取备用及存储 代码 代码 本文通过抓取免费的高匿IP代理,将其写入列表并保存为json格式文件,且将代码进行了封装,方便以后抓取数据时动态的更新handle的IP地址,从一方面避免 ...

  2. 数据抓取 -- 使用代理IP爬取数据:(2):使用timeout 时要注意,防止数据加载不完整 ,导致爬取丢失(举例)

    问题: 在使用代理IP爬取数据的时候,经常会出现爬取的网址信息不完整的现象.其中有个原因就是timeout设置问题. 代码如下: import requests from bs4 import Bea ...

  3. 爬虫入门,快速抓取数据

    大到各类搜索引擎,小到日常数据采集,都离不开网络爬虫.爬虫的基本原理很简单,遍历网络中网页,抓取感兴趣的数据内容.这篇文章会从零开始介绍如何编写一个网络爬虫抓取数据,然后会一步步逐渐完善爬虫的抓取功能 ...

  4. java广度优先爬虫示例,【爬虫】广度优先遍历抓取数据概述

    这次都是一些纯语言的表达,可能会有点啰嗦,或者有点枯燥,也是对爬虫的一些小小的见解,可能只是一些常见话,哈哈,还是耐心的写完. 网络爬虫的整体执行流程: 1)确定一个(多个)种子网页 2)进行数据内容 ...

  5. 网络爬虫-模拟手机浏览器抓取数据

    有些网站的数据在PC端很复杂,参数加密很严重,但是移动APP端的就没那么多加密,所以在遇到有些瓶颈的情况下,可以考虑从网页端转到移动端去抓包,爬取数据.这里有两种方法: 一. 使用模拟器下载APP 如 ...

  6. Python爬虫来啦,抓取数据导出到excel,简单明了,强大,直接贴代码

    #!/usr/bin/pythonimport requests import xlwt from bs4 import BeautifulSoupdef getHouseList(url):hous ...

  7. 数据抓取软件是如何抓取数据的?

    数据抓取现在是大多数企业公司都会使用的一种批量集成获取数据的技术手段.他能高效快捷的帮助企业获取想要的信息.也是有着人工无法比拟的优势.那么爬虫软件是怎么抓取数据的?使用过程中又是如何检测爬虫ip的? ...

  8. 测试开发Python培训:抓取新浪微博抓取数据-技术篇

    测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的sele ...

  9. 网页爬虫使用代理IP的几种方案,爬虫如何设置代理?

    不少网络公司在进行爬虫数据业务的时候,都会选择代理IP,网页爬虫在现如今非常常见,尤其是一些大数据处理公司,都会使用爬虫的方式来进行信息的抓取,而要想进行信息的精准抓取,那就必须使用靠谱且稳定的代理I ...

  10. 【完美解决】爬虫伪装代理IP方案

    爬虫伪装代理IP 爬虫程序频繁访问某网站,很容易触发网站的保护机制,造成无法访问.本文将解决这一问题. 首先要伪装请求头,request默认是python-requests,emmm,这不是找事嘛,首 ...

最新文章

  1. 神经网络入门——12梯度下降代码
  2. 字体设置_word字体设置:如何为常用字体设置快捷键
  3. Android Studio中安装OpenCV SDK
  4. 苏宁的另类“存在感”
  5. Linux代理后网页显示问题,项目部署到linux后出现的两个问题
  6. Code Complete-13/7/29
  7. #1403 : 后缀数组一·重复旋律 (可重叠最长重复K次子串问题)
  8. 网易视频云:分布式转码服务高可用浅析
  9. R语言quantstrat包
  10. phpstudy(自己电脑主机做服务器,手机网站界面打不开)
  11. php 访问url获得返回值,如何在curl php请求中获取数组值作为返回值?
  12. Android使用自定义字体(自定义view)
  13. 结构体的成员偏移地址和字节对齐
  14. 基于java的高校科研管理系统
  15. linux下keytool生成证书_keytool命令
  16. 电脑连接不上wifi,怎么办?
  17. java IDEA 打包发布
  18. 精密电阻阻值表丝印大全
  19. MT7621芯片技术资料分析,MT7621数据表原理图
  20. 微信公众号开发(一)配置服务器

热门文章

  1. Unity手册-Graphics -Tier
  2. 12款响应式 Lightbox(灯箱)效果插件
  3. Apache Kafka核心组件和流程-协调器(消费者和组协调器)-设计-原理(入门教程轻松学)
  4. Python之字典遍历元素
  5. 数据结构丿丶树 哈夫曼树
  6. IDEA 修改主题设置修改主题字体,编辑区字体
  7. arcgis属性字段fid修改 修改出现bad value
  8. 解决笔记本电脑有线耳机插入无反应的情况
  9. 根据前序序列创建二叉树
  10. 安装Office2013提示错误1706的解决方法