国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

使用 Node.js 開發資訊爬蟲流程

2024-05-06 15:22:48
字體:
來源:轉載
供稿:網友

最近項目需要一些資訊,因為項目是用 Node.js 來寫的,所以就自然地用 Node.js 來寫爬蟲了

項目地址:github.com/mrtanweijie… ,項目里面爬取了 Readhub 、 開源中國 、 開發者頭條 、 36Kr 這幾個網站的資訊內容,暫時沒有對多頁面進行處理,因為每天爬蟲都會跑一次,現在每次獲取到最新的就可以滿足需求了,后期再進行完善

爬蟲流程概括下來就是把目標網站的HTML下載到本地再進行數據提取。

一、下載頁面

Node.js 有很多http請求庫,這里使用 request ,主要代碼如下:

requestDownloadHTML () { const options = {  url: this.url,  headers: {  'User-Agent': this.randomUserAgent()  } } return new Promise((resolve, reject) => {  request(options, (err, response, body) => {  if (!err && response.statusCode === 200) {   return resolve(body)  } else {   return reject(err)  }  }) }) }

使用 Promise 來進行包裝,便于后面使用的時候用上 async/await 。因為有很多網站是在客戶端渲染的,所以下載到的頁面不一定包含想要的HTML內容,我們可以使用 Google 的 puppeteer 來下載客戶端渲染的網站頁面。眾所周知的原因,在 npm i 的時候 puppeteer 可能因為需要下載Chrome內核導致安裝會失敗,多試幾次就好了:)

puppeteerDownloadHTML () { return new Promise(async (resolve, reject) => {  try {  const browser = await puppeteer.launch({ headless: true })  const page = await browser.newPage()  await page.goto(this.url)  const bodyHandle = await page.$('body')  const bodyHTML = await page.evaluate(body => body.innerHTML, bodyHandle)  return resolve(bodyHTML)  } catch (err) {  console.log(err)  return reject(err)  } }) }

當然客戶端渲染的頁面最好是直接使用接口請求的方式,這樣后面的HTML解析都不需要了,進行一下簡單的封裝,然后就可以像這樣使用了: #滑稽 :)

await new Downloader('http://36kr.com/newsflashes', DOWNLOADER.puppeteer).downloadHTML()

二、HTML內容提取

HTML內容提取當然是使用神器 cheerio 了, cheerio 暴露了和 jQuery 一樣的接口,用起來非常簡單。瀏覽器打開頁面 F12 查看提取的頁面元素節點,然后根據需求來提取內容即可

readHubExtract () { let nodeList = this.$('#itemList').find('.enableVisited') nodeList.each((i, e) => {  let a = this.$(e).find('a')  this.extractData.push(  this.extractDataFactory(   a.attr('href'),   a.text(),   '',   SOURCECODE.Readhub  )  ) }) return this.extractData }

三、定時任務

cron 每天跑一跑 function job () { let cronJob = new cron.CronJob({ cronTime: cronConfig.cronTime, onTick: () => {  spider() }, start: false }) cronJob.start()}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 沂南县| 石门县| 鹤山市| 三都| 鹿泉市| 无为县| 科技| 临夏县| 连南| 永仁县| 昔阳县| 洛宁县| 桂林市| 阳朔县| 莒南县| 松桃| 长乐市| 云和县| 湖口县| 顺平县| 酉阳| 蒙城县| 额济纳旗| 文登市| 福安市| 木兰县| 建平县| 平和县| 神农架林区| 东乌珠穆沁旗| 申扎县| 双流县| 洛南县| 弥勒县| 蒙阴县| 曲麻莱县| 城口县| 庄浪县| 湟源县| 延寿县| 松江区|