编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

javascript优雅的异步处理爬虫

wxchong 2024-06-17 22:31:58 开源技术 15 ℃ 0 评论

可曾听闻过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等用来处理异步的过程,展现了其异步编程的魅力,希望能加深大家对于异步的了解,同时本人也是一个刚刚入坑前端的学生,希望大家可以和我交流。也希望大家纠正我的错误,本人将非常感激!

山东掌趣网络科技

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表