什么是爬虫
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
在生活中网络爬虫经常出现,搜索引擎就离不开网络爬虫。例如,百度搜索引擎的爬虫名字叫作百度蜘蛛(Baiduspider)。百度蜘蛛,是百度搜索引擎的一个自动程序。它每天都会在海量的互联网信息中进行爬取,收集并整理互联网上的网页、图片视频等信息。当用户在百度搜索引擎中输入对应的关键词时,百度将从收集的网络信息中找出相关的内容,按照一定的顺序将信息展现给用户。
本文将用用Nodejs 来实现一个网页抓取的小程序。
要用到的三个包
const cheerio = require('cheerio')
const request = require('request')
const fs = require('fs')
这三个包的主要功能介绍一下
- cheerio 读取html元素。
- request 进行请求
- fs操作文件(fs是nodejs自带的,无需安装依赖)
爬取的网站
知识点
- request(url).pipe() 返回的是文件流
- fs.createWriteStream 写入文件流
安装好依赖以后在根目录下新建img文件夹用来存放抓取的网页图片
index.js完整代码
const cheerio = require('cheerio')
const request = require('request')
const fs = require('fs')
const headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36',
}
const Repier = (options) => {
for (let i = 1; i <= options.page; i++) {
let optUrl = i == 1 ? options.url : options.url + `index_${i}.htm`
request({
url: optUrl,
headers
}, (_, response, body) => {
console.log(optUrl)
const $ = cheerio.load(body)
const list = $('.list ul li a img')
console.log(list,$)
list.each(async (index, item) => {
const url = $(item).attr('src')
if (url) {
try {
await request(url).pipe(fs.createWriteStream('./img/' +i+ '-'+index+ '.jpg'))
console.log(i, '----', index, url)
}
catch (e) {
console.log(e, 'error')
}
}
})
})
}
}
Repier({
url: 'http://www.netbian.com/meinv/',
page: 20
//页数随意调整
})
package.json代码
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cheerio": "^1.0.0-rc.11",
"download": "^8.0.0",
"express": "^4.18.1",
"request": "^2.88.2"
}
}
最后在终端中运行node index即可等待图片抓取并保存
成果展示