程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 知乎爬蟲之2:爬蟲流程設計(附贈爬出的數據庫),爬蟲附贈

知乎爬蟲之2:爬蟲流程設計(附贈爬出的數據庫),爬蟲附贈

編輯:JAVA綜合教程

知乎爬蟲之2:爬蟲流程設計(附贈爬出的數據庫),爬蟲附贈


本文由博主原創,轉載請注明出處:我的博客-知乎爬蟲之爬蟲流程設計

git爬蟲項目地址(關注和star在哪裡~~):https://github.com/MatrixSeven/ZhihuSpider (已完結)

附贈之前爬取的數據一份(mysql): 鏈接:https://github.com/MatrixSeven/ZhihuSpider/README.MD 只下載不點贊,不star,差評差評~藍瘦香菇)

(Ps:這個思路有問題,實際上並不是這麼搞得代碼,後續補上)
說到爬蟲,其實寫起來很簡單,爬蟲無非就是將自己想要的內容在頁面上抽離出來,並且存儲。這個過程在今天已經變得非常輕松,在Java下有Jsoup,Python下有BS4,還有通吃的正則等等,然而真正難的卻是在於偽造請求,截獲分析請求參數,獲取正確的頁面.
首先來說,一個能混得過去的爬蟲,應該有一個優秀的流程,在明確自己的目標後,應該立馬去設計爬蟲工作流程,而不是去無腦的Coding。

那麼今天咱們就先研究下咱們這個爬蟲的目標和流程。
首先咱們是要獲取知乎頁面上的個人信息,關注和被關注信息,首先咱們會遇到第一個問題就是登陸,咱們這裡暫且不講,
其次咱們就是要給定一個初始化url,然後進行followers的和followees的獲取,然後循環爬起來,那麼其中一定會遇到數據重復和人物關系建立的問題。

1.過濾重復數據

這個相對而言比較簡單,有幾種常規方法:

1. 數據庫設置主鍵,鎖定人物ID
2. 存入數據時查詢數據庫數據
3. 使用緩存隊列,在緩存中查找數據判斷

首先來說第一種,數據庫設置主鍵,鎖定人物ID,這個方法可以使數據永遠不重復,但是也會造成批量插入的時候造成出錯
第二種方法,存入數據時查詢數據庫數據,可行,但是多次訪問數據庫,造成效率低下
第三種方法,使用緩存隊列,在緩存中查找數據判斷,這種方法很好,而且速度相對較快,但是緩存太多容易出現OOM問題

在這裡咱們不選擇某一種方案,而是采用主鍵+優先緩存+數據庫查詢方式,後期自己實現一個LRU緩存隊列,提供命中率

2. 爬取時創建人物關系

這個問題思考了很久,也比較惡心,在人物不確定的情況下進行人物的獲取和關系的創建,怎麼處理好呢。我的想法是讓每一個人員信息攜帶一個上級信息,來判斷是否能夠構建人物關系,有點類似於尾遞歸的思想。

3. 繪制流程圖

那麼對於咱們的一個整體流程目前就有了(挑戰一下,還是放棄了、哈哈):

獲取URL-->解析頁面<--------
            |            |
            |            |
         是否存在         |
            /\           |
           /  \          |
        更新   攜帶       |
        數據   信息       |
               /\        |
              /  \       |
            跟隨  關注    |
            信息  信息----

獲取URL–》解析—》判斷—》更新/攜帶信息?—》分析跟隨者/根系關注者–》解析頁面
最終畫出真正的流程圖

//吾愛Java(QQ群):170936712(點擊加入)

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved