最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Node.js的強大爬蟲 能直接發(fā)布抓取的文章哦

 更新時間:2016年01月10日 17:13:19   投稿:lijiao  
基于Node.js的強大爬蟲能直接發(fā)布抓取的文章哦!本爬蟲源碼基于WTFPL協(xié)議,感興趣的小伙伴們可以參考一下

一、環(huán)境配置

1)搞一臺服務(wù)器,什么linux都行,我用的是CentOS 6.5;

2)裝個mysql數(shù)據(jù)庫,5.5或5.6均可,圖省事可以直接用lnmp或lamp來裝,回頭還能直接在瀏覽器看日志;

3)先安個node.js環(huán)境,我用的是0.12.7,更靠后的版本沒試過;

4)執(zhí)行npm -g install forever,安裝forever好讓爬蟲在后臺跑;

5)把所有代碼整到本地(整=git clone);

6)在項目目錄下執(zhí)行npm install安裝依賴庫;

7)在項目目錄下創(chuàng)建json和avatar兩個空文件夾;

8)建立一個空mysql數(shù)據(jù)庫和一個有完整權(quán)限的用戶,先后執(zhí)行代碼里的setup.sql和startusers.sql,創(chuàng)建數(shù)據(jù)庫結(jié)構(gòu)并導(dǎo)入初始種子用戶;

9)編輯config.js,標(biāo)明(必須)的配置項必須填寫或修改,其余項可以暫時不改:

exports.jsonPath = "./json/";//生成json文件的路徑
exports.avatarPath = "./avatar/";//保存頭像文件的路徑
exports.dbconfig = {
  host: 'localhost',//數(shù)據(jù)庫服務(wù)器(必須)
  user: 'dbuser',//數(shù)據(jù)庫用戶名(必須)
  password: 'dbpassword',//數(shù)據(jù)庫密碼(必須)
  database: 'dbname',//數(shù)據(jù)庫名(必須)
  port: 3306,//數(shù)據(jù)庫服務(wù)器端口
  poolSize: 20,
  acquireTimeout: 30000
};
  
exports.urlpre = "http://m.fzitv.net/";//腳本網(wǎng)址
exports.urlzhuanlanpre = "http://m.fzitv.net/list/index_96.htm/";//腳本網(wǎng)址
  
exports.WPurl = "www.xxx.com";//要發(fā)布文章的wordpress網(wǎng)站地址
exports.WPusername = "publishuser";//發(fā)布文章的用戶名
exports.WPpassword = "publishpassword";//發(fā)布文章用戶的密碼
exports.WPurlavatarpre = "http://www.xxx.com/avatar/";//發(fā)布文章中替代原始頭像的url地址
  
exports.mailservice = "QQ";//郵件通知服務(wù)類型,也可以用Gmail,前提是你訪問得了Gmail(必須)
exports.mailuser = "12345@qq.com";//郵箱用戶名(必須)
exports.mailpass = "qqpassword";//郵箱密碼(必須)
exports.mailfrom = "12345@qq.com";//發(fā)送郵件地址(必須,一般與用戶名所屬郵箱一致)
exports.mailto = "12345@qq.com";//接收通知郵件地址(必須)

保存,然后進(jìn)入下一步。

二、爬蟲用戶

爬蟲的原理其實就是模擬一個真正的知乎用戶在網(wǎng)站上點來點去并收集數(shù)據(jù),所以我們需要有一個真正的知乎用戶。 為了測試可以用你自己的賬號,但從長遠(yuǎn)著想,還是專門注冊個小號吧,一個就夠,目前的爬蟲也只支持一個。 我們的模擬過程不必像真的用戶那樣從首頁登錄,而是直接借用cookie值:

注冊激活登錄之后,進(jìn)入自己的主頁,使用任何有開發(fā)者模式或查看cookie插件的瀏覽器,打開知乎中自己的cookie。 可能有很復(fù)雜的一大串,但我們只需要其中一部分,即「z_c0」。 復(fù)制你自己cookie中的z_c0部分,連等號、引號、分號都不要落下,最后格式大致是這樣的:

z_c0="LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb";

在mysql數(shù)據(jù)庫的cookies表中插入一行記錄,其中各字段值分別為:

  • email:爬蟲用戶的登錄郵箱
  • password:爬蟲用戶的密碼
  • name:爬蟲用戶名
  • hash:爬蟲用戶的hash(每個用戶不可修改的唯一標(biāo)識,其實這里用不到,可以暫時留空)
  • cookie:剛才你復(fù)制的cookie

然后就可以正式開始運行了。如果cookie失效或用戶被封,直接修改這行記錄的cookie字段即可。

三、運行

推薦用forever來執(zhí)行,這樣不僅方便后臺運行和記錄日志,還能在崩潰后自動重啟。 示例:

forever -l /var/www/log.txt index.js

其中-l后的地址就是記錄日志的地方,如果放在web服務(wù)器目錄下,就能在瀏覽器里通過http://www.xxx.com/log.txt 來直接查看日志了。在index.js后面加參數(shù)(用空格分隔)可以執(zhí)行不同的爬蟲指令:
1、-i 立即執(zhí)行,如果不加此參數(shù)則默認(rèn)在下一個指定時間執(zhí)行,如每天凌晨0:05分;
2、-ng 跳過抓取新用戶階段,即getnewuser;
3、-ns 跳過快照階段,即usersnapshot;
4、-nf 跳過生成數(shù)據(jù)文件階段,即saveviewfile;
5、-db 顯示調(diào)試日志。
各階段的功能在下一節(jié)介紹。為了方便運行,可以將這行命令寫成sh腳本,例如:

#!/bin/bash
cd /usr/zhihuspider
rm -f /var/www/log.txt
forever -l /var/www/log.txt start index.js $*

具體路徑請?zhí)鎿Q成自己的。這樣就能通過./zhihuspider.sh 加參數(shù)來開啟爬蟲了: 比如./zhihuspider.sh -i -ng -nf就是立即開始任務(wù)、跳過新用戶和保存文件階段。停止爬蟲的方法是forever stopall(或stop序號)。

四、原理概述

看知乎爬蟲的入口文件是index.js。它通過循環(huán)方式在每天指定時間執(zhí)行爬蟲任務(wù)。每天順序執(zhí)行的任務(wù)有三個,分別是:

1)getnewuser.js:通過當(dāng)前庫內(nèi)用戶關(guān)注者列表的對比,抓取新用戶信息,依靠此機(jī)制可以自動將知乎上值得關(guān)注的新人納入庫中;

2)usersnapshot.js:循環(huán)抓取當(dāng)前庫內(nèi)用戶資料和答案列表,并以每日快照形式保存下來。

3)saveviewfile.js:根據(jù)最近一次快照內(nèi)容,生成用戶分析列表,并篩選出昨日、近日和歷史精華答案發(fā)布到「看知乎」網(wǎng)站。

在以上三個任務(wù)執(zhí)行完畢后,主線程會每隔幾分鐘刷新一次知乎首頁,驗證當(dāng)前cookie是否仍然有效,如果失效(跳到未登錄頁),則會給指定郵箱發(fā)送通知郵件,提醒及時更換cookie。 更換cookie的方法和初始化時一致,只需手工登錄一次然后取出cookie值就行了。如果對具體代碼實現(xiàn)感興趣可以仔細(xì)看里面的注釋,調(diào)整一些配置,甚至嘗試自己重構(gòu)整個爬蟲。

Tips

1)getnewuser的原理是通過對比前后兩天快照中用戶的關(guān)注數(shù)量進(jìn)行指定抓取,所以必須有了至少兩次快照之后才能開始,之前就算執(zhí)行也會自動跳過。

2)快照抓到一半是可以恢復(fù)的。如果程序出錯崩潰,用forever stop停止它,然后加上參數(shù)-i -ng,立即執(zhí)行并跳過新用戶階段就能從剛才抓到一半的快照繼續(xù)下去了。

3)不要輕易增加快照抓取時的(偽)線程數(shù),即usersnapshots中的maxthreadcount屬性。線程太多會導(dǎo)致429錯誤,同時抓取回來的大量數(shù)據(jù)可能會來不及寫入數(shù)據(jù)庫造成內(nèi)存溢出。所以,除非你的數(shù)據(jù)庫搭在SSD上,線程不要超過10個。

4)saveviewfile生成分析結(jié)果的工作需要至少近7天的快照才能進(jìn)行,如果快照內(nèi)容少于7天會報錯并跳過。此前的分析工作可以手動查詢數(shù)據(jù)庫進(jìn)行。

5)考慮到大多數(shù)人并不需要復(fù)制一個「看知乎」,已經(jīng)將自動發(fā)布wordpress文章函數(shù)入口注釋掉了。如果你搭建好了wordpress,記得開啟xmlrpc,然后設(shè)置一個專門用于發(fā)布文章的用戶,在config.js中配置相應(yīng)參數(shù)并將saveviewfile中的相關(guān)代碼解除注釋。

6)由于知乎對頭像做了防盜鏈處理,我們在抓取用戶信息時一并也將頭像獲取了下來,保存在本地,發(fā)布文章時使用的是本地頭像地址。需要在http服務(wù)器中將url路徑指向保存頭像的文件夾,或者將保存頭像的文件夾直接放到網(wǎng)站目錄下。

7)代碼可能不太容易讀懂。除了node.js的回調(diào)結(jié)構(gòu)本身就較混亂之外,還有一部分原因是最初寫程序時我剛剛開始接觸node.js,有很多不熟悉的地方導(dǎo)致結(jié)構(gòu)混亂沒有來得及改正;另一部分是在多次縫縫補補中累加了許多丑陋的判斷條件和重試規(guī)則,如果全部去掉,代碼量可能會下降三分之二。但這是沒有辦法的事,為了保障一個系統(tǒng)的穩(wěn)定運行,必須加入這些。

8)本爬蟲源碼基于WTFPL協(xié)議,不對修改和發(fā)布做任何限制。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • Node.JS獲取GET,POST數(shù)據(jù)之queryString模塊使用方法詳解

    Node.JS獲取GET,POST數(shù)據(jù)之queryString模塊使用方法詳解

    本文將詳細(xì)介紹nodeJS中的queryString模塊使用方法,包括Node.JS獲取GET,POST數(shù)據(jù)的方法,需要的朋友可以參考下
    2020-02-02
  • windows利用nvm管理node.js2025最新版

    windows利用nvm管理node.js2025最新版

    本文主要介紹了在Windows系統(tǒng)上使用nvm管理Node.js版本的過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 詳解Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù)

    詳解Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù)

    這篇文章主要介紹了Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 前端自動化開發(fā)之Node.js的環(huán)境搭建教程

    前端自動化開發(fā)之Node.js的環(huán)境搭建教程

    這篇文章主要介紹了前端自動化開發(fā)之Node.js環(huán)境搭建的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 詳解nodejs通過響應(yīng)回寫的方式渲染頁面資源

    詳解nodejs通過響應(yīng)回寫的方式渲染頁面資源

    本篇文章主要介紹了詳解nodejs通過響應(yīng)回寫的方式渲染頁面資源,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • node.js中的buffer.copy方法使用說明

    node.js中的buffer.copy方法使用說明

    這篇文章主要介紹了node.js中的buffer.copy方法使用說明,本文介紹了buffer.copy的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js中的fs.fsync方法使用說明

    node.js中的fs.fsync方法使用說明

    這篇文章主要介紹了node.js中的fs.fsync方法使用說明,本文介紹了fs.fsync的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.jsv16 版本安裝的實現(xiàn)

    Node.jsv16 版本安裝的實現(xiàn)

    本文主要介紹了Node.jsv16 版本安裝的實現(xiàn),文中通過圖文示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 如何優(yōu)雅地在Node應(yīng)用中進(jìn)行錯誤異常處理

    如何優(yōu)雅地在Node應(yīng)用中進(jìn)行錯誤異常處理

    這篇文章主要介紹了如何優(yōu)雅地在Node應(yīng)用中進(jìn)行錯誤處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • express+multer上傳圖片打開亂碼問題及解決

    express+multer上傳圖片打開亂碼問題及解決

    這篇文章主要介紹了express+multer上傳圖片打開亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

什邡市| 尉氏县| 大邑县| 阿勒泰市| 铁岭县| 三台县| 盐边县| 金昌市| 灵川县| 通许县| 汝南县| 甘孜| 进贤县| 喜德县| 宜章县| 错那县| 延边| 高尔夫| 基隆市| 花莲市| 岫岩| 铁岭县| 会宁县| 聂拉木县| 普兰县| 铁力市| 博野县| 泊头市| 德阳市| 宁海县| 庄浪县| 黑河市| 青神县| 祁东县| 长治市| 德阳市| 平罗县| 武平县| 泸水县| 肥乡县| 临猗县|