python爬虫scrapy框架_nodejs爬虫框架

python爬虫scrapy框架_nodejs爬虫框架叮铃铃!叮铃铃!老师:“小明你的梦想是什么?”,沉思了一下小明:“额额 我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟”老师:“北宋有一个人和你一样···”;哈喽!大家好!请叫我布莱恩·奥复托·杰森张;爬虫部分!一提到爬虫,好多人先想到python没错就是那个py交易的那个,这货所为是什么都能干上九天揽月下五洋捉鳖无处不出现它的身影鄙人对它也是不得不折

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

叮铃铃!叮铃铃!老师:“小明 你的梦想是什么?”, 沉思了一下 小明:“额额  我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟” 老师:“北宋有一个人和你一样···”;

哈喽!大家好! 请叫我布莱恩·奥复托·杰森张;

爬虫部分!

一提到爬虫,好多人先想到python 没错就是那个py交易的那个,这货所为是什么都能干 上九天揽月下五洋捉鳖无处不出现它的身影 鄙人对它也是不得不折服,在爬虫这货缺点在于编码格式上还有那些DOM操作他就不是那么得心应手,so 这家伙 就是nodejs依赖着对于前端的粘合性,这货做扒手也是一绝啊!咱们先三八一下它 虽然本人学的也是懵懵懂懂,但是咱毕竟靠吹牛逼起家,就告诉你们我就是吹牛逼,你们看看它爆不爆!  嘿嘿嘿

爬虫大本分是为了获取网络数据,哎 又爱说废话 直接上代码了

var cheerio = require(‘cheerio’);  这个东西呢 可以简单理解为Nodejs里面的JQuery。它包括了 jQuery 核心的子集,Cheerio 从jQuery库中去除了所有 DOM不一致性和浏览器尴尬的部分,揭示了它真正优雅的API。

var superagent = require(‘superagent’); 这东西简单理解为Node里面的Ajax。superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下。

var http = require(‘http’); Node自带http服务框架;

东西备的差不多了,这个意思大家应该清楚,就是node模拟浏览器发送 ajax在信息中心提取自己想要的东西;介于一般成熟性网站都会做的很是讲究,所以你查找元素也是很简便嘛,一下为部分代码,希望大家理解意思就好,毕竟代码还要自己写,复制黏贴错都找不到!

superagent.get(links).end(function (err, sres) {

          // 常规的错误处理
          if (err) {

            return next(err);
          }
          // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
          // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
          // 剩下就都是 jquery 的内容了
          var $ = cheerio.load(sres.text);
          ans += $(“.channel”).text() +’ 宝贝名称:<br/><br/>’;
          $(‘#J_Title’).each(function (index, item) {

            var $item = $(item);
            ans += $item.find(“.tb-main-title”).text() + ‘<br/>’;
          });
          ans += “链接”+links;

        res.send(ans);         

        // 将内容呈现到页面
        });

这样我们把想要的信息发送到了调用接口的页面; 如果不想这样 我还要复制太麻烦 我想直接要文件,搜嘎  那就要用这个东东 文件流的读写;

            /*var data = ”;
            // 创建可读流
            var readerStream = fs.createReadStream(‘output.txt’);
            
            // 设置编码为 utf8。
            readerStream.setEncoding(‘UTF8’);
            
            // 处理流事件 –> data, end, and error
            readerStream.on(‘data’, function(chunk) {

               data += chunk;
            });
            
            readerStream.on(‘end’,function(){

                 // 创建一个可以写入的流,写入到文件 output.txt 中
                var writerStream = fs.createWriteStream(‘output.txt’);
                
                // 使用 utf8 编码写入数据
                writerStream.write(data+ans+’\r\n’,’UTF8′);
                
                // 标记文件末尾
                writerStream.end();
            });
            
            readerStream.on(‘error’, function(err){

               console.log(err.stack);
            });*/

 这里要注意的一点是由于node异步i/o操作,你所执行的事件如果存在先后依赖关系,后面事件要写到回调函数里面;如果我们直接写入那么文件只剩下最后一条,他会把之前数据清空;我这里采用的写入方法是先读取再写入的方法,我也在找有没有啥方法直接续写的 可是没找到··· 不知道大神门都是怎么写滴ha 


说完爬取数据再说访问量的事情就简单啊 我只要模拟浏览器请求页面就可了,鉴于每个网站技术不一样 检测方式也是各种各样 用session啊 用ip啊  用浏览器信息啊 再组合起来 方法无穷,就看人家写网站的把访客量当一回事不了(就好比我之前写的一个东东,请求一个接口就加一个,你刷新页面就ok了嘛 );

拿csdn来说 显然人家没有当回事,so 我这级别都有机可乘,咱们就是图个乐呵,哎 心里高兴 没办法 你咬我啊!

这次 用 http模块就可以了;

var options = {

    url: baseUrl,
    method: ‘GET’,
    charset: “utf-8”,
     headers:{

        ‘Accept’:’application/json, text/javascript, */*; q=0.01′,     
        ‘Content-Type’:’text/plain/application/x-www-form-urlencoded; charset=UTF-8′,
        ‘X-Requested-With’:’XMLHttpRequest’,
        ‘Set-Cookie’: ‘ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH’,
        ‘Cookie’:’imooc_uuid=fe4eb00a-b08b-4442-a87d-c077f0fa94dc; imooc_isnew_ct=1482112514; loginstate=1; apsid=I3ODRkMzRiY2MzNjZkZDlkNzZkZDk3OGYwNGFkYTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAyNjA1OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMjE0NDgzNjM5QHFxLmNvbQAAAAAAAAAAAAAAAAAAADhjOTM3MTEyMTVkZDJkODBiZGQ5MGZhYjUxZDk2YTNkADZbWAA2W1g%3DYj; last_login_username=1214483639%40qq.com; PHPSESSID=dlq6ctudtje87erfq523b0dak7; jwplayer.volume=71; IMCDNS=0; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1482112514,1482372528,1482377953,1482457056; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1482460689; imooc_isnew=2; cvde=585c7fe052b01-26′,
        ‘Server’:’ Microsoft-IIS/5.0′,   
        ‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36′
      }
    //rejectUnauthorized: false   //在请求的时候指定忽略证书验证,即options的rejectUnauthorized参数设置为false
};

var a = parseInt(2000 * Math.random() + 1000);
setInterval(function() {

    var ans = “”;
    a = parseInt(2000 * Math.random() + 200);
    http.get(baseUrl, function(response) {

        var body = [];
        //console.log(response.headers); //header
        response.on(‘data’, function(chunk) {

            body.push(chunk);
            //console.log(chunk); //buffer
        });

        response.on(‘end’, function() {

            body = Buffer.concat(body);
            var $ = cheerio.load(body.toString());
            
            ans += $(“.article_title”).find(‘a’).text();
            ans += $(“.link_view”).text();

            console.log(‘博客标题:’+ans + ‘–调用间隔时间:’ + a + ‘\r\n’);
            
        });
    });

}, a);

我之前试过更换ip进行测试 结果 不是用ip检测  这里的意思已经很是明确了吧。在它这种简单判断下,我们模拟浏览器进行访问 对于它需要校验你是不是刚刚访问过的数据是对不上的 我们每次请求新数据值都为空 进行判断一定是不等于 这样它把我们每次都当成一个新访问来处理;

     这里值得一提的就是如果地址为网站为https时 需要加载 https模块  http是会报错的,在没有证书的情况下 请求的时候指定忽略证书验证,即options的rejectUnauthorized参数设置为false;这样就可以了; 啥? https模块不会下载? npm install ***  就ok啦 

需要后面加 -g的是gulp grunt 还有supervisor 这种东西 其他的只要在自己项目里面加载就好 还有grunt自动化下载配置一下全都搞定

 “dependencies”: {

    “grunt-contrib-stylus”: “^1.0.0”,
    “util”: “*” },

 想要指定版本就制定 不要就是* 默认最新;Global(阁楼包-全局);来 尽情赞美我吧 ;


Robotjs node桌面自动化框架;

同事用java写了一个自动发消息的小程序,我一看心中甚欢,那我就用node搞一搞吧,这就发现了这个node神器,国内网站穷的连个文档都难找 所以我就在这里给大家发一下;

Node.js桌面自动化。控制鼠标,键盘,读取屏幕。RobotJS支持Mac,Windows和Linux。没啥多说的;(写的我口干舌燥,都不知道晚上吃啥了);

npm install robotjs  没毛病,再说怎么安装都要呕吐了;

鼠标事件 – 写个程序让鼠标满屏幕自己跑 好不好撒;(不会直接拿代码玩);

var robot = require(“robotjs”);
robot.setMouseDelay(2);

var twoPI = Math.PI * 2.0;
var screenSize = robot.getScreenSize();
var height = (screenSize.height / 2) – 10;
var width = screenSize.width;

for (var x = 0; x < width; x++)
{

    y = height * Math.sin((twoPI * x) / width) + height;
    robot.moveMouse(x, y);

}

键盘事件 — 比较有意思就是自己写东西;

var robot = require(“robotjs”);

robot.typeString(“Hello World”);

robot.keyTap(“enter”);

自己写东西 再自己回车 那你想一想你把程序跑起来;把鼠标往qq 微信里面一放 嘿嘿

微信就把你屏蔽掉;发送消息过于频繁。。。 so 来个定时器就妥活了;

屏幕事件 — 这个个人Jude比较无聊 做个吸色器还可以;

var robot = require(“robotjs”);
var mouse = robot.getMousePos();
var hex = robot.getPixelColor(mouse.x, mouse.y);
console.log(“#” + hex + ” at x:” + mouse.x + ” y:” + mouse.y);

吸取鼠标位置 屏幕颜色;

这个框架 方法还有好多 譬如 robot.mouseClick(); 左击事件 你把鼠标放到哪里让他一直点击·· 有点神经病一样;但是在程序里面配合起来,你会发现 我的天啊(此处想用哪个奥运表情包);

哎 写的鄙人手疼 不知你可知我心;话说回来 为啥没图呢; 好多地方应该有图, 此时因为搞了一个软件把鄙人电脑ip搞乱了;扣扣登录不上去,自然没法截图;

手疼了 不说了 说多了都是眼泪 ;

在北京有些人总是问你们北方人怎么这么怕冷 再次解释一下: 北方的干冷是无力攻击,多穿衣服就可轻松防御;南方湿冷是没法攻击,穿再多衣服都没用,得要抗性!置于 北京 那是中间地带 要双抗;快来复活甲啊@!@;










版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192316.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • zabbix集成onealert验证报错:create media type failed! error message[通俗易懂]

    zabbix集成onealert验证报错:create media type failed! error message[通俗易懂]zabbix集成onealert验证报错:createmediatypefailed!errormessage一、报错详细信息[root@host-10-101-16-202bin]#bashinstall.sh1841b33f-1c97-1ae5-7dc2-e5a411b9eabfstarttocreateconfigfile…Zabbix管理地址:h…

    2022年5月9日
    61
  • Navicat 4 激活码_通用破解码

    Navicat 4 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    73
  • es7学习笔记 cpu负载不均衡、超长fullGC、大量400报错[通俗易懂]

    es7学习笔记 cpu负载不均衡、超长fullGC、大量400报错[通俗易懂]ElasticSearch负载不均衡现象:往es7集群中推数时,发生如下情况接口出现很多400 发现集群中某台机器cpu被怼爆 发生fullGC产生400报错的原因是es7做了熔断优化,当jvm内存使用超过阈值,为了避免丑陋的oom,会直接限流并抛出EsRejectedExecutionException。我们强硬的关掉了这个配置,因为我们的推数有失败重试。产生fullGC是因为一个bulk批处理的数据量太大,我们一个文档1.5M,800个文档作为一批,两个线程并行推,jvm内

    2022年5月23日
    60
  • 关于SpringCloud项目注册中心eruka切换nacos注册不成功记录

    关于SpringCloud项目注册中心eruka切换nacos注册不成功记录使用IDEA新建的项目,SpringBoot版本是2.1.9,引入的nacos版本是0.2.1.RELEASE,配置都是ok的,启动项目也没有报错,但是一直就是注册不上去,原因是因为SpringBoot的版本太高,nacos版本太低,导致不兼容,兼容版本SpringBoot版本是2.0.6.RELEASE,nacos版本是0.2.1.RELEASE…

    2022年8月21日
    6
  • Java集合汇总篇「建议收藏」

    Java集合汇总篇「建议收藏」一.集合框架Java集合框架一些列的接口和类来实现很多常见的数据结构和算法,例如LinkedList就是集合框架提供的实现了双向链表的数据结构,关于这一篇文章建议大家收藏,我会不断地完善和扩充它的内容,例如最下面的系列文章我以后也会对它进行不断的更新集合框架的接口集合框架提供了很多接口,这些接口都包含了特定的方法来实现对集合上的特定操作)我们将要学习这些接口以及子接口和它们的各种实现类,在开始之前我们先简单学习一下这些广泛运用的接口,可以看到整个集合框架,总共有三个顶级接口Collecti

    2022年7月16日
    17
  • 卸载npm和安装npm_使用`npm uninstall`卸载npm软件包「建议收藏」

    卸载npm和安装npmTouninstallapackageyouhavepreviouslyinstalledlocally(usingnpminstall<package-name>inthenode_modulesfolder,run要卸载以前在本地npminstall<package-name>(使用node_modul…

    2022年4月10日
    297

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号