第五章 爬虫

2022-08-03  本文已影响0人  扶光_

爬虫是指使用代码模拟用户批量发送网络请求,批量获取数据的行为。

axios,是一个基于promise的网络请求库,作用于node.js和浏览器中,它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在客户端 (浏览端) 则使用XMLHttpRequest。
首先在html中先引入axios
在这个网址https://www.bootcdn.cn/axios/中复制下标签

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指⼀种创建交互式⽹⻚应⽤的⽹⻚开发技术。
Ajax 是⼀种⽤于创建快速动态⽹⻚的技术。
Ajax 是⼀种在⽆需重新加载整个⽹⻚的情况下,能够更新部分⽹⻚的技术。
通过在后台与服务器进⾏少量数据交换,Ajax 可以使⽹⻚实现异步更新。这意味着可以在不重新加载整个⽹⻚的情况下,对⽹⻚的某部分进⾏更新。
传统的⽹⻚(不使⽤ Ajax)如果需要更新内容,必须重载整个⽹⻚⻚⾯。

一,在前端页面借助axios请求ajax

<script>
        //借助axios发送ajax请求
        axios({
            //请求方式
            method:"get",
            //请求地址
            url:"../01/file1/msg.txt",

            //发送数据
            //post发送数据
            data:{x:1,y:2},

            //get发送数据
            params:{x:1,y:2}

        }).then((res)=>{
            console.log("成功的回调函数");
            console.log(res);
        }).catch(err=>{
            console.log(err);//失败的回调函数
        })
    </script>

打开网页我们会得到这样的一个数据


image.png

那么我们最终需要拿到后端给我们的数据,可以写成

 console.log(res.data);

二,后端使用axios

第一步安装axios包

    cnpm i axios -S

在后端使用axios和前端基本相似,只不过后端的地址必须是一个端口,而不是相对路径,拿百度的网址为例,我们访问百度,要得到百度中的数据。

const axios = require("axios")
axios({
    method:"get",

    url:"https://www.baidu.com/",

}).then(res=>{
    console.log(res.data);
}).catch(err=>{
    console.log(err);
})

要知道百度的地址有这么多


百度数据

而我们用axios访问得到的数据只是这么一点..那这是为什么呢


image.png
如果通过后端去向http的这种地址发送请求的时候,他们后端会检测你当前的环境是不是一个浏览器环境,如果你不是一个正常使用浏览器环境,他只会给你返回一个简单的一段数据。

那么怎么样我们才能让我们的后端环境变成和浏览器环境一样呢,然后访问到所有的数据,这也就是爬虫的原理

我们后端发送请求需要伪装成浏览器环境请求

2.1伪装浏览器请求环境

利用请求头来进行伪装

axios({
    method:"get",

    url:"https://www.baidu.com/",

    //请求头
    headers:{
        //伪装浏览器   后面这一串就是浏览器的版本信息
        "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    }

如此就访问到了所有数据


三,举例爬小说

爬虫 一定要分析当前网页结构

首先将我们想要爬的网站地址放在请求的url上


image.png

那么这样肯定是不行的,我们需要处理,将字符串当成一个html文档来处理更加便捷

html
通过便签来拿到里面的数据,但node没有解析html标签的能力
所有我们需要一个包来进行完成,也就是虚拟DOM
npm中常见的虚拟DOM有两种
1原生js操作的jsdom
2jq操作的cheerio

下面又jq操作 首先安装cheerio
npm i cheerio -S
其次在引入require("cheerio")

找主体内容
then(({data})=>{
    const $ = cheerio.load(data);
    let txt = $(".ywskythunderfont").text()
    console.log(txt);
})
拿到小说

最后我们将小说保存在一个文件夹中,需要用到fs模块

上一篇下一篇

猜你喜欢

热点阅读