可曾听闻过js的爬虫吗
环境需求
node 环境(百度搜索node直接安装即可)
puppeteer第三方库
开始实战
进入你要写代码的文件在处打开命令窗口 执行命令npm init -y
安装puppeteer (npm install puppeteer --save)
新建一个js文件
简单的api介绍
const puppeteer = require('puppeteer')
// 声明一个浏览器 里面的参数配置课查官网
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
dumpio: false
})
// 打开一个新的界面
const page = await browser.newPage()
await page.goto(url, {
waitUntil: 'networkidle2'
})
page.evaluate
代码实现
const pupeteer = require('puppeteer')
const fs = require('fs')
const path = require('path')
let url = `http://top.hengyan.com/mianfei/default.aspx?p=`
const sleep = time => new Promise(resolve => {
setTimeout(resolve, time)
})
const writeToFile = data =>{
return new Promise((resolve ,reject) =>{
fs.writeFile(path.resolve(__dirname,'./nodejs.txt'),data,(err,data)=>{
if (err) {reject(err)}
resolve(console.log('success'))
})
})
}
// js的自启动函数
;(async ()=>{
console.log('start visit the target page')
const browser = await pupeteer.launch({
args: ['--no-sandbox'],
dumpio: false
})
var total = []
for (let i =1; i <= 4; i++ )
{
console.log(i)
url = url + String(i)
console.log(url);
const page = await browser.newPage()
await page.goto(url, {
waitUntil: 'networkidle2'
})
await sleep(3000)
const result = await page.evaluate(()=>{
var $ = window.$ // 观察到了那个网站使用了Jquery所以我使用$去接受window挂载的$实现元素的获取
var items = $('.list ul')
var links = []
if (items.length >=1) {
items.each((index, item) =>{
let it = $(item)
let num = it.find('.num').text()
let bookname = $(it.find('.bookname a')[0]).text() // 使用$重新包装元素,使其重新成为$对象
let nevigatehref = $(it.find('.bookname a')[0]).attr('href')
let Articlehref = $(it.find('.bookname a')[1]).attr('href')
let author = it.find('.author').text()
let length = it.find('.length').text()
let click = it.find('.click').text()
let update = it.find('.update').text()
links.push({
'排行': num, '书名':bookname,'导航链接':nevigatehref, '原文链接':Articlehref,
'作者':author, '文章字数':length, '点击数':click, '更新时间':update
})
})
}
links.shift(); //获取到的第一个元素不是我们想要的内容,删除掉
return links;
})
//console.log(result)
total.push(result)
url = url.substring(0,url.length-1) // 拼接字符串的时候每次删除刚刚被拼接上的字符,保证url的正确性
}
console.log(JSON.stringify(total));
total = JSON.stringify(total) // 写进文件前转化为字符串
browser.close()
await writeToFile(total);
console.log('执行完毕')
})()
结果查看
?
本文使用了promise ,async,await等用来处理异步的过程,展现了其异步编程的魅力,希望能加深大家对于异步的了解,同时本人也是一个刚刚入坑前端的学生,希望大家可以和我交流。也希望大家纠正我的错误,本人将非常感激!
山东掌趣网络科技
本文暂时没有评论,来添加一个吧(●'◡'●)