爬虫

爬虫:
竞价排名 搜索引擎
1.获取相关的网页
2.根据网页获取内容信息

爬虫的步骤:
1.通过http 或者 https模块 获取网络资源(网页 记事本 图片 音频 视频)

http.get(url,(res)=>{
  let rawData=''
  res.on('data',(chunk)=>{
    
    rawData+=chunk
  })

  res.on('end',()=>{
    
  })
})
.on('error',()=>{
})

2.分析内容 (正则表达式)
cheerio 获取网页的具体内容信息

同步异步问题

1.多个异步操作按照固定的顺序执行 -> 回调嵌套->回调地狱->promise的链式调用->async await(伪同步)优化promise的

框架 express来写api接口 koa egg
node 引入第三方模块 首先在当前文件夹寻找 node_modules
如果没有依次向上寻找 直到找到为止

api接口的构成:
ajax接口后端来写 前端来使用
ajax接口四要素:
1.接口地址url
2.请求方法
3.传递的字段(数据格式)
4.返回信息
前端:
1.传递数据 传给后端
2.处理后端的返回结果
后端:
1.接受前端传递的数据
2.处理数据
3.将处理结果返回给前端

获取数据的方式
  1. get数据 req.query
  2. post 数据 req.body 需要使用第三方插件 body-parser
post 数据格式的多样性

1.x-www-form-urlencode
2.json
3.form-data 格式

前端接口测试工具 postman postwoman …

作业

  1. 爬取一个网站 并且将图片下载到本地
  2. 爬取一个网站 并且将音乐、视频下载到本地
  3. request 第三方模块
  4. 用node 写一个注册登录的接口 和发送邮件功能关联
  5. mongodb https://www.mongodb.com/download-center/enterprise
    爬虫cheerio的用法:
    cheerio的作用处理HTML格式的字符串 处理完毕后可以使用jq的语法
    const cheerio = require(‘cheerio’)
    //先引入
    //cheerio的作用处理HTML格式的字符串 处理完毕后可以使用jq的语法
    const $ = cheerio.load(‘

    哈哈

    ’)

console.log($(‘p’).text())

id选择器的用法
const $ = cheerio.load(‘

哈哈

’)

console.log($(’#p1’).text())

同步异步问题
promise pennding
resolve成功 then函数处理
reject失败 catch函数处理

function num1(){
 return new Promise((resolve,reject)=>{
 //要做的异步操作
 setTimeout(()=>{
    //异步成功 就执行 resolve方法  外部用then处理
    //异步失败 就会执行reject方法   外部用catch处理
     reject('韩梅梅')
 },200)
 })
}
num1()
.then((res)=>{
    console.log('执行then',res)
})
.catch((err)=>{
    console.log('执行catch',err)
})

async  
1.修饰符处理一个函数  可以让一个函数返回promise对象
2.在函数内部只要不出错  都是then的回调  reject 抛出错误
3.函数内部return 的数据就是then里接受的数据 不return 相当于return的undefined

//async 的基本案例

async function sum(){
console.log(‘1’)
// throw ‘这里出错了’ 抛出错误字符串
// throw new Error(‘这里出错了’) 抛出错误对象
console.log(‘2’)
}
//如果没有async 得到的是undefined 有async得到promise对象
// console.log(sum())
//Promise{undefined}
sum()
.then((res)=>{
console.log(‘then’,res)
})
.catch((err)=>{
console.log(‘catch’,err)
})


await
1.修饰符  更多的来修饰一个promise对象  
2.它可以将异步变成同步
3.不能单独使用  只能在async函数中使用
function num1(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            reject(666)
        },2000)
    })
}

async function sum(){
    let n1 = await num1()
    //await 修饰一个promise对象 返回值就成了 内部resolve的参数
    //好处是就可以把原本是异步的代码  在async变成是同步的
}
sum()

你可能感兴趣的:(爬虫)