简易爬虫
作用:通过后端语言爬取网站中的数据,然后通过特定模块进行数据清洗,最后将数据输出给前端。
反爬虫
解决: 给a标签的内容中放一张图片
步骤
1.引入http模块
const http = require( 'http' )
2.复制node.js官网,http.get()
3.复制node.js官网,const options() 放在http.get()上面
4.将http.get()中的路径换成 options注意这不是字符串,所以不用单引号。
5.找到要爬取的网站,在控制台的Network中找到Doc,然后刷新会有一个文件夹,文件夹内就是要的数据;点击最左边的Headers,下拉找到General中的Request URL,复制其中的URL。
6.在options对象中修改信息,hostname就是域名(不带http和结尾斜杠的纯域名),path就是com/后面的路径,如果没有就留空,method为GET请求,因为是http.get(),上下文要一致,headers复制Acc开头的控制台中整个Request Headers代码添加到里面,最后的content-length值改成0;
并将:后面的值加上单引号,后面加逗号。:前面的带-横杠的也加上单引号。
7.查看控制台数据类型,如果是text类型的,要删除报错程序。(let reeor至return部分)
8.删除try中的josn处理程序,换成consolelog(rawData)
*9如果请求的网站是https协议的,所有http代码都要换成https,端口号改成443,option里的headers要改成header;
10.输入ls查看文件目录,输入命令:node+空格+文件名 运行,会得到一段数据。
11.接下来进行数据清洗获得想要的数据 用第三方插件【模块】 cheerio
12.先npm init -y 出现package.js文件用于记录项目依赖
13.cnpm i cheerio -S
14.引入模块
const cheerio = require( 'cheerio' )
15.在try中引入代码,并删除console.log(rawData)
const $ = cheerio.load( rawData )
$('标签.类名 a').each( function ( item ) {
console.log( $( this ).text() )
})
const req=http.get() 给模块定义一个常量
req.end() 再最后添加
- 利用原生代码创建一个服务器,参考04.原生代码创造服务器;
- 将从头开始至http.get之前的代码复制粘贴到原生服务器上层函数前,并把重复的变量删除。
- 把剩下的http.get的部分复制粘贴替换掉原生服务器的response.write(),response.end()语句。
- 将console.log( $( this ).text() ) 替换成 response.write(
<h3> ${ $( this ).text() } </h3>
) - 在在函数下加上response.end()
运行文件即可在页面输出爬到的数据