前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫scrapy框架_nodejs爬虫框架

python爬虫scrapy框架_nodejs爬虫框架

作者头像
全栈程序员站长
发布2022-10-01 17:37:47
1.9K0
发布2022-10-01 17:37:47
举报

大家好,又见面了,我是你们的朋友全栈君。

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

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

爬虫部分!

一提到爬虫,好多人先想到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/>’; item = (item); ans +=

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 +=

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.cn/192316.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬虫部分!
  • Robotjs node桌面自动化框架;
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com