爬知識星球,製作自己的知識倉庫

胖琪的升級之路發表於2019-03-27

爬蟲知識星球

我們都知道現在知識星球裡面的內容有很多的沉澱,但是我們並不能每次開啟從頭開始閱讀到最後,雖然星主也會每隔一段時間對知識星球內容進行彙總,但還是有一定的遺留內容。

為了讓自己對知識有個很好的把握,方便自己後期查詢整理,今天先使用Java簡單的使用爬蟲,進行讀取資料。

環境準備

我們使用的語言是Java8,開發工具是Idea,倉庫管理使用ggithub,程式碼會存放到github上。

爬蟲程式碼連結:github.com/menhuan/not…

如果需要直接使用的,需要自己把裡面cookie改成自己的,並且處理下瀏覽頭部資訊。

星球準備

進行爬蟲首先需要找到星球是按照什麼登陸,是按照token還是按照cookie,還是按照session的方式來進行資料互動的。

關於以上三者的內容區別,可以參考我上一篇文章的連結。

找出來http設定的header

這次爬蟲並沒有設定模擬登陸的操作,只是根據訪問具體連結來操作。

登陸星球后,找到連結,檢視請求頭裡面的內容。

2019-03-27-23-53-13

這樣我們就能找到後臺訪問連結地址,如果在查詢的時候,並不知道怎麼檢視,就自己使用F12檢視下。

內容顯示如圖上所示。

不同的連結內容,可能並沒有找到cookie資訊,這時候需要我們耐心下,對於前後端產品都是需要鑑權驗證的。

2019-03-27-23-56-02

從圖上顯示可知,知識星球是將token內容放到在cookie當中,那麼我們在模擬訪問的時候需要在http header上設定 cookie。

從上面圖中我們可以找到在訪問需要設定的header,還有需要訪問的連結url: api.zsxq.com/v1.10/group…

當然,在圖上內容顯示,還有更多的介面讓我們去訪問資料,先將整體的流程資料獲取到,我們再進行更多的資料訪問整合。

需要設定的header內容包含如下:

  • cookie: zsxq_access_token=CD063C9D-9A81-B150-C996-sdasa 需要替換成自己的
  • Referer:wx.zsxq.com/dweb 需要跳轉的網站
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36 設定瀏覽器

這三個內容設定在http 訪問中即可

寫程式

程式是建立在Spring boot 1.5.10版本上。構建程式使用的gradle 4.9+.

   /**  http 訪問知識星球設計的請求
     * @return java.lang.String
     * @Author fruiqi
     * @Description 爬蟲設定header, 訪問的url
     * @Date 22:53 2019/3/27
     * @Param [headMap, url]
     **/
    public String restStar(Map<String, String> headMap, String url) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headMap.forEach((k, v) -> {
            headers.set(k, v);
        });
        HttpEntity entity = new HttpEntity(headers);
        ResponseEntity<String> exchange = restTemplate.exchange(url,
                HttpMethod.GET, entity, String.class);
        String result = exchange.getBody();
        return result;
    }
複製程式碼

請求統一設定好之後,寫訪問service

        Map<String,String> headMap = new HashMap<>(10);
        headMap.put("User-Agent",USER_AGENT_ARRAP);
        headMap.put("Referer","https://wx.zsxq.com/dweb/");
        headMap.put("cookie","zsxq_access_token=CD063C9D-9A81-B150-C996-35B20D2E1ABD");
        RequestUtil requestUtil = new RequestUtil();
        String res = requestUtil.restStar(headMap, url);
        JSONObject jsonObject = JSON.parseObject(res);
        logger.info("[info] JSON content :{}",res);
複製程式碼

通過上面連結我們就可以獲得到知識星球資料。

當然這個具體還是在搭架子,後期需要完善的內容如下:

  1. 獲取所有星球分組資訊。
  2. 根據不同的組獲取星球星主的問答,進行摘取。
  3. 設定定期策略,採集資料,並整理成冊
  4. 資料整理與分析。

以上暫時是星球爬取內容的規劃,預計在3個月內完成,歡迎大家一起圍觀。

原始碼地址如下:

github.com/menhuan/not…

摘要資料內容

總結

·END·

路雖遠,行則必至

本文原發於 同名微信公眾號「胖琪的升級之路」,回覆「1024」你懂得,給個讚唄。

微信ID:YoungRUIQ

公眾號

相關文章