关于nodejs爬虫:浅尝一下Node爬虫吧~

新建一个文件夹,这里我命名为“爬”。 mkdir pa初始化一个工程,并装置相干模块。 cd pa// 装置package.jsonnpm init// 装置cheerio,用来在服务端应用jq语法操作domnpm install cheerio --save// 装置request,用来发送网络申请npm install request --save新建文件命名为app.js,依照需要爬取数据,并保留到data.txt。 const http = require('http')const fs = require('fs')const cheerio = require('cheerio')function getData(url, title) { http.get(url, function(res) { let html = '' res.setEncoding('utf-8') res.on('data', function(chunk) { html += chunk }) res.on('end', function() { const $ = cheerio.load(html) // 按页面dom构造获取你须要的数据 const content = `\n\n\n\n\n\n--------布告【${title}】的内容---------\n\n` + $('.xq4').text().trim() + `\n\n--------布告【${title}】的内容完结喽---------\n\n\n` fs.appendFile('./datas/data.txt', content, 'utf-8', function(err) { if (err) { console.log(err); } }) }) })}// 依照理论状况编写申请http.get(`接口地址`, function(res) { res.setEncoding('utf-8') res.on('data', function(res) { res = JSON.parse(res) res.data.forEach(item => { const url = `页面地址带上接口返回的参数${item.id}` getData(url, item.title) }); })})执行node app.js,一个超级简略的爬虫就实现了~

March 28, 2022 · 1 min · jiezi

关于nodejs爬虫:node爬虫遇到的各种问题cheeriopuppeteer

工夫:2021年4月1号,文中各版本号以该工夫为背景问题一、网页采纳gb2312编码,爬取后中文全副乱码环境:node@8.12.0,cheerio@0.22.0网站应用的gb2312编码,开始用http间接拜访网页,cheerio加载后console进去中文全副乱码: const http = require('http')const cheerio = require('cheerio')const baseUrl = '******'http.get(baseUrl, res => { let html = '' res.on('data', data => { html += data }) res.on('end', () => { downloadHandler(html) })}).on('error', () => { console.log('出错了')})function downloadHandler(html) { const $ = cheerio.load(html) // 默认解析 console.log($.html());}cheerio解析:不解析: function downloadHandler(html) { const $ = cheerio.load(html,{ decodeEntities: false }) // 不解析 console.log($.html());} 起因:Node不反对gb2312解决:应用superagent取代http,同时应用superagent-charset解决编码问题const request = require('superagent')require('superagent-charset')(request)const cheerio = require('cheerio')const baseUrl = '******'request.get(baseUrl) .buffer(true) .charset('gbk') .end((err, html) => { downloadHandler(html) })function downloadHandler(html) { const htmlText = html.text const $ = cheerio.load(htmlText,{ decodeEntities: false })}问题二、一个循环外部,每次循环都会有一个异步申请;循环内部须要等外部所有申请返回后果后再执行解决:const idList = [1,2,3,4]getData(idList).then(data => { // get data})function getData(idList) { let asyncPool = [] idList.forEach(id => { asyncPool.push((() => { return new Promise((resolve,reject) => { return request.get(`http://detail/${id}`) .buffer(true) .charset('gbk') .then(html => { return Promise.reslove(html) }) }) })()) }) return Promise.all(asyncPool).then(data => { return data })}问题三、运行puppeteer报错:unexpected token {环境:node@8.12.0,npm@6 ...

April 2, 2021 · 1 min · jiezi