爬虫项目中引用的包及其用法

爬虫项目中引用的包及其用法

写在前面

  • 爬虫项目,需要用到一下几个包
  1. fs
  2. request
  3. iconv
  4. cheerio

fs模块

fs模块是内置模块,无需通过npm下载,只要在一开始通过这行代码引用就行了

1
var fs = require('fs');

作用

fs里面的api很多,但是在爬虫项目中,我们只用了一次

1
fs.writeFileSync(filename, JSON.stringify(fetch));
  • writeFileSync()这个函数主要是用来同步写入文件的,第一个参数是文件路径,第二个是写入文件的字符串,第三个是文件编码,默认是utf8

request模块

request模块需要调用npm导入

1
npm install request --save

作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'
}
//header就是伪装成一个浏览器,为了防止网站的反爬虫机制
function request(url, callback) {
var options = {
url: url,
encoding: null,//编码
//proxy: 'http://x.x.x.x:8080',
headers: headers,//上面写的headers
timeout: 10000 //反应时间,超过这个毫秒数,我们就放弃这个网页
}
myRequest(options, callback)
//这里需要知道options和callback是什么意思
//options是构建请求的必要参数
//callback是请求成功后执行的回调函数
//也就是我们要请求访问网站的一个动作
}
  • 写好request函数之后我们需要在以下两个函数中调用
  1. 读取种子页面,遍历新闻链接的时候(此时在母网站)

  2. 读取新闻链接的时候(此时在子网站)

因为这篇文章知识介绍各个模块的作用和功能,所以函数具体如何展开不予以讨论

iconv-lite模块

iconv-lite模块需要用npm导入

1
npm install iconv-lite --save

作用

iconv-lite的作用就是转码,比如在这行代码中

1
2
var html = myIconv.decode(body, myEncoding);
var html_news = myIconv.decode(body, myEncoding);
  • 我们可以看到 用iconv-lite.decode( , )可以转码,这里myEncoding已经设置成了’utf-8’
  • 通过转码能规避乱码现象

cheerio模块

cheerio 模块需要用npm导入

1
npm install cheerio --save

作用

  • cheerio 模块是爬虫中很重要的一个模块最主要的作用就是加载你想要访问的HTML页面,可以说,就是把html页面翻译给我们的处理器。有了它我们才能对网页做进一步处理操作
1
2
3
4
5
6
7
8
9
10
11
var myCheerio = require('cheerio')
//在引用过后,myCheerio在爬虫项目中在以下两个地方使用到了
var html =myIconv.decode(body, myEncoding);
var $ = myCheerio.load(html, { decodeEntities: true });
-------------------------------------------------------------
var html_news = myIconv.decode(body, myEncoding);
var $ = myCheerio.load(html_news, { decodeEntities: true });
/*
var $ = cheerio.load(html,{decodeEntities:false});
load函数的第一个参数html就是之前http.get方法中所获得的数据;第二个参数可选,主要是用来设置格式,比如decodeEntities:false设置了不会出现中文乱码。
*/

关于 $ 符号的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var seedURL_format = "$('a')";
var keywords_format = " $('meta[name=\"keywords\"]').eq(0).attr(\"content\")";
var title_format = "$('title').text()";
var date_format = "$('#pubtime_baidu').text()";
var author_format = "$('#editor_baidu').text()";
var content_format = "$('.left_zw').text()";
var desc_format =
" $('meta[name=\"description\"]').eq(0).attr(\"content\")";
var source_format = "$('#source_baidu').text()";

/*
在这里,$ 符号就是查找的意思
1 $('a') 查找的就是以a打头的 子网页链接
<a href="//www.chinanews.com/gn/2020/04-22/9164904.shtml">
2 $('meta[name=\"keywords\"]').eq(0).attr(\"content\")"
查找的就是这一类标签中的content内容,eq(0)就是从头开始把你后面content里的东西都取出来
<meta name="keywords" content="确诊病例,出院,疑似病例,死亡病例,治愈" />
3.$('title').text()
查找的就是<title>标签中的text内容
<title>31省份新增新冠肺炎确诊病例 其中4例为本土病例-中新网</title>
4. $('#pubtime_baidu').text()
查找的就是<span id="pubtime_baidu">2020-04-23 08:40:21</span>
中的text内容
注意,这里的#的作用就是表示 id的名字
5.$('#editor_baidu').text()
查找的是 <span id="editor_baidu">责任编辑:于晓</span>中的text内容
6.$('.left_zw').text()
查找的就是<div class="left_zw">
注意,这里我们要在left_zw前面加上一个 . 具体原因应该是和class有关系
7.8 就不讲了

*/
//随后,在用cheerio读取网站源代码的时候,网站内的信息会分门别类存储到各自对印的$中去,完成信息爬取
var $ = myCheerio.load(html_news, { decodeEntities: true });
-------------本文结束,感谢您的阅读-------------