爬虫是指使用代码模拟用户批量发送网络请求,批量获取数据的行为。
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文档来处理更加便捷
通过便签来拿到里面的数据,但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模块
网友评论