每天几分钟跟小猫学前端之node系列:用node实现最简单的爬虫
先来段求分小视频:
https://www.iesdouyin.com/share/video/6550631947750608142/?region=CN&mid=6550632036246555405&titleType=title×tamp=1525407578&utm_campaign=client_share&app=aweme&utm_medium=ios&iid=30176260384&utm_source=qq&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=aweme_ios&utm_campaign=client_share&uid=92735989673&did=30176260384
本文的教学视频地址:
https://v.qq.com/x/page/b0643tut4ze.html
 

 const request = require('request');
 const app = express();
 app.get('/:key',function(req,res){
     console.log(req.params.key)
 })
 app.listen(3000,()=>{
     console.log("service start on port 3000");
 })

 const express = require('express');
 const request = require('request');
 const app = express();
 app.get('/:key',function(req,res){
     console.log(req.params.key)
     let spider = new Spider();
     spider.fetch("http://www.baidu.com/s?wd="+req.params.key,(err,body)=>{
         if(!err){
             res.send(body.toString());
         }
     })
 })
 app.listen(3000,()=>{
     console.log("service start on port 3000");
 })
 class Spider{
     fetch(url,callback){
         request({url: url, encoding : null}, (error, response, body)=>{
             if (!error && response.statusCode === 200){
                 callback(null ,body);
             }else{
                 callback(error ,'<body></body>');
             }
         });
     }
 }
 
 const express = require('express');
 const request = require('request');
 const app = express();
 const cheerio = require('cheerio');
 app.get('/:key',function(req,res){
     let spider = new Spider();
     spider.fetch("http://www.baidu.com/s?wd="+req.params.key,(err,$)=>{
         spider.fetchCallback(err,$,res)
     })
     console.log("http://www.baidu.com/s?wd="+req.params.key)
 })
 app.listen(3000,()=>{
     console.log("service start on port 3000");
 })
 class Spider{
     fetch(url,callback){
         request({url: url, encoding : null}, (error, response, body)=>{
             if (!error && response.statusCode === 200){
                 callback(null ,cheerio.load('<body>'+body+'</body>'));
             }else{
                 callback(error ,cheerio.load('<body></body>'));
             }
         });
     }
     fetchCallback(err,$,res){
         if(!err){
             let keyList = [];
             let table = $('body').find("#rs table").html();
             res.send(table);
         }
     }
 }

每天几分钟跟小猫学前端之node系列:用node实现最简单的爬虫的更多相关文章
- 只需几分钟跟小猫学前端(内含视频教程):nodejs基础之用express、ejs、mongdb建设简单的网站
		开门见山视频教程 https://v.qq.com/x/page/d0645s79xrq.html 前 言: 这是小猫的第二篇node教程,第一篇教程是一个简单的试水,小猫的node教程面向对象为没有 ... 
- 原生JS实现轮播+学前端的感受(防止走火入魔)
		插件!插件!天天听到有人求这个插件,那个插件的,当然,用第三方插件可以大幅提高开发效率,但作为新手,我还是喜欢自己来实现,主要是我有时间! 今天我来给大家分享下用原生JS实现图片轮播的写法 前辈们可以 ... 
- 重学前端  ---  Promise里的代码为什么比setTimeout先执行?
		首先通过一段代码进入讨论的主题 var r = new Promise(function(resolve, reject){ console.log("a"); resolve() ... 
- ife 零基础学院 day 1 - 我为什么想学前端
		与前端结缘 我是后端研发,毕业四年,用了四年C#,一开始写ASP.NET,有时会在asp页面写简单的js和html,做点css样式调整.当时的感触是前端调试太费劲了,因为没有js.html.css ... 
- 结合jquery的前后端加密解密  适用于WebApi的SQL注入过滤器  Web.config中customErrors异常信息配置  ife2018 零基础学院 day 4  ife2018 零基础学院 day 3  ife 零基础学院 day 2 ife 零基础学院 day 1 - 我为什么想学前端
		在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ... 
- 重学前端--js是面向对象还是基于对象?
		重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ... 
- 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
		15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ... 
- css与javascript重难点,学前端,基础不好一切白费!
		JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ... 
- 学前端的第一门语言HTML
		学前端最终要做的就是制作各种各样的网页,html就相当于网页的骨架,所以我们学习前端的第一步就是先学html,接下来学习什么是html. 什么是HTML? HTML指的是超文本标记语言(Hyper T ... 
随机推荐
- Xdoclet + Ant自动生成Hibernate配置文件
			在使用Hibernate的时候,过多的Hibernate配置文件是一个让人头疼的问题.最近接触了Xdoclet这个工具.它实际上就是一个自动代码生成的工具,Xdoclet不能单独运行,必须搭配其他工具 ... 
- 美国康奈尔大学BioNB441元胞自动机MATLAB应用
			美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ... 
- iOS开发之一:入门介绍
			今天就介绍一下iOS开发的基本的东西,有很多东西都是经常用到的而我却经常记不住,所以还是写下来吧. iOS开发需要的开发工具是Xcode,而Xcode又必须运行在 OS X(苹果系统)环境下,所以我们 ... 
- 【自制插件】将MMD4Mecanim转换的MMD模型导入maya
			这个已经废弃了_(:зゝ∠)_,另外做了升级版: http://www.cnblogs.com/marisa/p/5174150.html ============================== ... 
- MFC的两个问题
			1.启动WinApp的时候,报 ASSERT(AfxGetThread() == NULL)错误依赖的MFC DLL工程设置里面加上_USRDLL2. MFC误报内存泄露全局对象释放的问题,添加mfc ... 
- UNIX环境高级编程——文件和目录
			一.获取文件/目录的属性信息 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); in ... 
- 【Linux命令】netcat 网络工具的瑞士军刀
			netcat被成为网络工具中的瑞士军刀,之前也没怎么用过,挺惭愧的,那么现在来看看怎么用吧. udp 和 tcp协议都比较好使,至少在测udp的时候,使用telnet感觉很无力呀.(nc 和 netc ... 
- android官方技术文档翻译——Android Lint
			本文译自androd官方技术文档<Android Lint>,原文地址:http://tools.android.com/tips/lint. 本文地址:http://blog.csdn. ... 
- 如何设计一个web容器
			开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探 ... 
- Android官方技术文档翻译——Gradle 插件用户指南(7)
			本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ... 
