国产精品――色哟哟,在线观看国产高清字幕,一级毛片视频在线观看,亚洲欧美另类综合,国产精品亚洲专区无码web

国产精品――色哟哟,在线观看国产高清字幕,一级毛片视频在线观看,亚洲欧美另类综合,国产精品亚洲专区无码web

合肥做網(wǎng)站,選擇瘋狗科技,專(zhuān)業(yè)、敬業(yè)的合肥網(wǎng)絡(luò )公司
首頁(yè) > 網(wǎng)站技術(shù) > 詳情

使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程

2018-01-10 14:22:56   來(lái)源:互聯(lián)網(wǎng)   瀏覽:  次
最近項目需要一些資訊,因為項目是用 Node js 來(lái)寫(xiě)的,所以就自然地用 Node js 來(lái)寫(xiě)爬蟲(chóng)了項目地址:github com mrtanweijie…,項目里面爬取了 Readhub 、 開(kāi)源中國 、 開(kāi)發(fā)者頭條 、 36Kr 這幾個(gè)網(wǎng)站的資訊內容

最近項目需要一些資訊,因為項目是用 Node.js 來(lái)寫(xiě)的,所以就自然地用 Node.js 來(lái)寫(xiě)爬蟲(chóng)了

項目地址:github.com/mrtanweijie… ,項目里面爬取了 Readhub 、 開(kāi)源中國 、 開(kāi)發(fā)者頭條 、 36Kr 這幾個(gè)網(wǎng)站的資訊內容,暫時(shí)沒(méi)有對多頁(yè)面進(jìn)行處理,因為每天爬蟲(chóng)都會(huì )跑一次,現在每次獲取到最新的就可以滿(mǎn)足需求了,后期再進(jìn)行完善

爬蟲(chóng)流程概括下來(lái)就是把目標網(wǎng)站的HTML下載到本地再進(jìn)行數據提取。

一、下載頁(yè)面

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 來(lái)進(jìn)行包裝,便于后面使用的時(shí)候用上 async/await 。因為有很多網(wǎng)站是在客戶(hù)端渲染的,所以下載到的頁(yè)面不一定包含想要的HTML內容,我們可以使用 Google 的 puppeteer 來(lái)下載客戶(hù)端渲染的網(wǎng)站頁(yè)面。眾所周知的原因,在 npm i 的時(shí)候 puppeteer 可能因為需要下載Chrome內核導致安裝會(huì )失敗,多試幾次就好了:) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
  }
 })
 }

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

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

二、HTML內容提取

HTML內容提取當然是使用神器 cheerio 了, cheerio 暴露了和 jQuery 一樣的接口,用起來(lái)非常簡(jiǎn)單。瀏覽器打開(kāi)頁(yè)面 F12 查看提取的頁(yè)面元素節點(diǎn),然后根據需求來(lái)提取內容即可 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
 }

三、定時(shí)任務(wù)

1
2
3
4
5
6
7
8
9
10
11
cron 每天跑一跑
function job () {
 let cronJob = new cron.CronJob({
 cronTime: cronConfig.cronTime,
 onTick: () => {
  spider()
 },
 start: false
 })
 cronJob.start()
}

四、數據持久化

數據持久化理論上應該不屬于爬蟲(chóng)關(guān)心的范圍,用 mongoose ,創(chuàng )建Model 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const NewsSchema = new Schema(
 {
 title: { type: 'String', required: true },
 url: { type: 'String', required: true },
 summary: String,
 recommend: { type: Boolean, default: false },
 source: { type: Number, required: true, default: 0 },
 status: { type: Number, required: true, default: 0 },
 createdTime: { type: Date, default: Date.now }
 },
 {
 collection: 'news'
 }
)
export default mongoose.model('news', NewsSchema)

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { OBJ_STATUS } from '../../Constants'
class BaseService {
 constructor (ObjModel) {
 this.ObjModel = ObjModel
 }
 
 saveObject (objData) {
 return new Promise((resolve, reject) => {
  this.ObjModel(objData).save((err, result) => {
  if (err) {
   return reject(err)
  }
  return resolve(result)
  })
 })
 }
}
export default BaseService

資訊

1
2
3
4
import BaseService from './BaseService'
import News from '../models/News'
class NewsService extends BaseService {}
export default new NewsService(News)

愉快地保存數據

1
await newsService.batchSave(newsListTem)

更多內容到Github把項目clone下來(lái)看就好了。

總結

 

原文鏈接:https://juejin.im/post/5a506e6d51882573450156e3?utm_source=tuicool&utm_medium=referral

亚洲系列无码专区偷窥无码| 99re热影院视频在线观看| 亚洲+精品+手机| 亚洲手机中文字幕| 中文字字幕在线中| 激情综合色五月六月婷婷| 亚洲国产日韩欧美综合久久| 亚洲中文字幕无码一久久区| 成人k视频国产频道网址| 亚洲A∨永久无码精品尤物| 狠狠色婷婷久久综合频道日韩| 国产成人精品高清在线观看99| 亚洲va在线va天堂va偷拍| 一区二区三区无码按摩精油免费| 97大学生情侣真实露脸在线| 在线毛片免费观看| 在线观看无码AV网址| 99蜜桃臀久久久欧美精品| 亚洲av无码专区在线电影视色| 欧美激情aⅴ一区二区三区| 中文在线免费观看| 在线观看亚洲精品福利片| 国产福利在线永久视频| 亚洲精品美女一区二区| 亚洲精品成人7777777| 亚洲欧美吉吉影音| 又粗又硬又黄又爽的视频永久| 精品原创巨作av女教师| 亚洲男人的天堂一区二区| 亚洲国产日产高清精品一区二区| 亚洲国产一区二区三区在观看| 亚洲国产成人精品女人久久久一| 国产成人精品久久亚洲高清不卡| 亚洲五月综合缴情在线观看| 永久免费aV无码网站性色aV| 日韩在线中文字幕综合| 91人妻人人澡人人爽人人爽| 亚洲欧美精品SUVa| 又湿又紧又大又爽A视频男| 18禁无遮拦无码国产在线播放| 97成人做爰A片免费看网站| 在线看片成人一区二区| 亚洲中文字幕精华在线看| 天堂成人Av在线播放| 日本一区二区免费看| 亚洲色大成网站www男同| 久久精品国产福利国产秒拍| 免费国语版在线观看| 亚洲乱码无人区卡1卡2卡3| 色婷婷av一区二区三区之一色屋| 亚洲乱码一区二三四区AVA| 亚洲无av在线中文字幕| 中文字幕日韩专区下载| 亚洲国产成人精品无码区在线网站| 一本色道久久99一综合| 精品欧美一区二区免费久久久| 亚洲电影自拍电影| 国产美女午夜福利视频| 亚洲AV无码专区一级婬片毛片| 亚洲中文无码亚洲人成视二区| 亚洲激情熟女乱伦| 亚洲国产精品一区二区成人片| 精品成在人线av无码免费看| 一区二区三区毛片无码| 久久香蕉国产线看观看青草| 亚洲图片日韩视频一区二区| 成人免费视频一区二区在线播放| 国产草草影院CCYYCOM| 亚洲人精品午夜射精日韩| 精品人妻无码一区二区三区蜜桃一| 亚洲激情图片区图片| 在线视频夫妻内射| 亚洲国产熟妇无码一区二区李宗瑞| 亚洲欧美日韩高清| 亚洲成人av电影在线| 亚洲欧美国产一区二区三区不卡| 色欲综合久久无码五十人妻| 欧美精品一区二区在在线| 亚洲国产成人av在线电影播放| 最新行业报告披露研究成果| 亚洲午夜女子视频| 亚洲性无码av中文字幕| 日韩在线视频第一页| 制服丝袜aV无码专区a| 中文无码乱人伦中文视频播放| 久久这里只有精品免费看青草| 亚欧日韩毛片在线看免费网站| 国产裸舞福利资源在线视频| 亚洲图片色图日韩无码| 精品久久香蕉国产线看观看gif| 亚洲无码a∨在线观看| 一本久道综合成人| 男人激烈吮乳吃奶视频免费| 成人国产片视频在线观看| 亚洲精品乱码久久久久久按摩| 国产精品天天看大片特色视频草莓| 国内精品久久久久精品| 亚洲欧美一区二区三区中文| 亚洲国产A∨无码影院| 最新日本剧免费看| 亚洲欧美日韩色图| 亚洲欧美中文日韩综合| 日韩精品三区四区五区| 亚洲综合国内精品自拍,| 在线免费观看国产www| 亚洲精品久久久久私欲| 亚洲福利在线播放| 又大又粗又黄的免费视频| 亚洲精品一区二区三区蜜桃| 亚洲国产精品国自产拍AV| 中文+日韩+欧美| 免费国语手机免费观看| 亚洲高清揄拍自拍| 亚洲国产成人AⅤ毛片大全久久| 一本色道久久综合亚洲精品加| 在线深夜aV免费永久观看| 中文字幕人妻丝袜六区八区| 亚洲精品视频国产| 亚洲国产成人精品无码区99| 中文无码在线观看| 亚洲熟妇少妇任你躁在线又见| 成人无码精品网站产| 亚洲熟妇AV一区二区三区宅男| 中文字幕无码在线观看| 免费无删减在线播放| 精品色欧美色国产一区国产| 亚洲成a人片在线观看日本| 日韩Av大片在线观看免费| 国产suv精品一区二| 亚洲手机在线观看看片| 亚洲成在人线AV无码| 亚洲熟妇久久国产精品| 亚洲精品导航在线网站观看| 一区二区三区久久国产精品| 天天干天天拍天天操| 亚洲综合色视频在线观看| 在线播放国产一区二区三区| 亚洲色偷偷无码av男人的天堂| 一区二区三区在线看| 国内亚洲精品视频久久| 无码鲁丝色综合五月天婷婷丁香| 精品免费囯产一区二区三区四区| 日韩成人高潮a毛片免费观看| 永久免费aV无码网站性色aV| 一区二区三区日本精品| 亚洲精品人成网在线播放影院| 在线观看亚洲糸列| 国产欧美日韩vā另类影音先锋| 亚洲欧洲日本精品专线| 亚洲午夜国产一区99re久久| 欧美日韩有精品一区二区三区| 中文国产欧美在线观看| 精品三级网站在线观看| 在线观看国产一区日本二区| 亚洲A无码国产精品久久一| 亚州第一页欧美日韩精品| 在线播放中文字幕| 亚洲人成网站777色婷婷| 中文字幕乱码一区二区三区免费| 亚洲国产精品综合欧美| 免费高清欧美大片在线看| 久久精品一区二区三区免费1| 欧美日韩专区在线观看| 在线免费看影视网站| 亚洲无码午夜小电影| 一区二区三区视频| 又大又粗日出了好多水好爽| 亚洲激情婷婷狠狠干| 亚洲人欧洲国产综合| 91亚洲欧美日产综合在线网| 伊人av无码av中文av狼人| 亚洲成aⅴ人影院在线观看| 亚洲国产精品一区二区久久| 中文字幕日韩一区二区三区不卡| 无码人妻精品一区二区三区夜夜嗨| 一区二区三区下卡精品| 欧美的高清视频在线观看| 国产裸拍裸体视频在线观看| 亚洲无码激情视频在线观看| 在线免费观看亚洲欧美| 亚洲男人的天堂在线播放| 亚洲视频在线视频| 欧美成人精品激情在线观看| 狠狠综合久久久久综合小蛇| 在线亚洲高清揄拍自拍—品区| 亚洲无线码高清在线观看| 国产av成人一区二区三区| 亚洲一级特黄特黄的大片| 亚洲精品午夜无码| 亚洲成av人无码中文字幕| 亚洲第一se情网站| 国产综合久久久婷婷| 在线观看免费视频| 亚洲人精品亚洲人成在线| 亚洲精品美女久久777777| 欧美人与动性行为视频| 亚洲精品国产专区第一页| 欧美一级淫片免费播放40分钟| 久久精品亚洲熟女av蜜臀| 亚洲欧洲日产国产a∨无码| 亚洲AV无码乱码在线观看裸奔| 精品熟女碰碰人人A久久| 亚洲AV无码专区亚洲猫咪| 亚洲欧洲国产日产综合综合| 一本加勒比hezyo综合| 一级片年人免费看视频| 最新国产在线不卡aV| 人妻无码熟妇乱又伦精品视频| 男人下面进入女人下面的视频| 亚洲精品动漫在线线观看人| 最新国产剧在线观看| 999久久久免费精品| 亚洲国产成人久久綜合一| 中文字幕乱码在线播放| 亚洲欧美精品伊人久久| 92精品国产自产在线观看直播| 亚洲综合无码无在线观看| 亚洲欧美国产日韩在线观看| 亚洲欧美成人一区二区三区| 亚洲国产午夜精品不卡| 在线亚洲欧美日韩| 欧美视频在线观看网站| 亚洲欧洲中文日韩久久av乱码| 国产乱子伦精品免费高清| 亚洲国产成人精品| 亚洲欧美日韩国产中文| 亚洲精品无码久久千人| 日本精品国产1区2区3| 国产精品视频400部| 天堂成人Av在线播放| 国产字幕手机免费播放| 国产乱码免费一区二区三区不卡| 国产高潮流白浆喷水免费动漫| 国产精品18久久久| 中文字幕欧美一区| 国产精品国产三级国产av麻豆| 亚洲精品无人一区二区| 在线观看免费高清完整电影| 又粗又大又硬毛片免费看| 最新亚洲人成在线观看| 国产成人免费影院观看| 亚洲一区二区女搞男| 亚洲无码av在线播放| 亚洲精品午夜精品| 欧美午夜国产在线观看| 亚洲综合色区无码——一区二区| 亚洲综合自拍偷拍无码| 国产极品福利视频丝袜| 亚洲色偷偷色噜噜狠狠99| 亚洲成aV人片在线观看天堂| 亚洲雄风激荡全球【电影票房| 在线观看不卡av一区| 中文字幕不卡视频第二页| 亚洲日韩熟女第一区| 亚洲精品自产拍在线观看亚瑟| 男人的天堂亚洲蜜桃久久| 成人一区二区三区精品久久| 亚洲av无码男人的天堂| 欧美精品一区久久精品| 在线国内91中文字幕| 欧美激情aⅴ一区二区三区| 999久久久999精品网站| 一级成年大片在线观看| 在线观看国产情趣免费视频| 国产伦精品一区二区三区网站| 亚洲地图高清版大图| 亚洲国产欧美三级视频网站| 国产成人久久精品激情91| 亚洲天堂成人福利| 色综合久久天天综合绕观看| 中文字幕av每日更新| 亚洲欧美韩日国产精品| 久久中文字幕一区二区三区| 亚洲欧美国产一区二区在线看| 一级片无码在线观看| 久久久久久国产精品美女| 亚洲色欧美在线影院| 日本一区二区三区爆乳| 亚洲欧美激情精品一| 少妇高潮喷水在线免费观看| 内射人妻无套中出无码| 中文字幕第35页| 最新天堂中文版在线| 国产精品综合色一区| 亚洲无码毛片久久精品| 亚洲女同一区二区三久久精品| 亚洲国产午夜精品不卡|