爬蟲知識星球
我們都知道現在知識星球裡面的內容有很多的沉澱,但是我們並不能每次開啟從頭開始閱讀到最後,雖然星主也會每隔一段時間對知識星球內容進行彙總,但還是有一定的遺留內容。
為了讓自己對知識有個很好的把握,方便自己後期查詢整理,今天先使用Java簡單的使用爬蟲,進行讀取資料。
環境準備
我們使用的語言是Java8,開發工具是Idea,倉庫管理使用ggithub,程式碼會存放到github上。
爬蟲程式碼連結:github.com/menhuan/not…
如果需要直接使用的,需要自己把裡面cookie改成自己的,並且處理下瀏覽頭部資訊。
星球準備
進行爬蟲首先需要找到星球是按照什麼登陸,是按照token還是按照cookie,還是按照session的方式來進行資料互動的。
關於以上三者的內容區別,可以參考我上一篇文章的連結。
找出來http設定的header
這次爬蟲並沒有設定模擬登陸的操作,只是根據訪問具體連結來操作。
登陸星球后,找到連結,檢視請求頭裡面的內容。
這樣我們就能找到後臺訪問連結地址,如果在查詢的時候,並不知道怎麼檢視,就自己使用F12檢視下。
內容顯示如圖上所示。
不同的連結內容,可能並沒有找到cookie資訊,這時候需要我們耐心下,對於前後端產品都是需要鑑權驗證的。
從圖上顯示可知,知識星球是將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);
複製程式碼
通過上面連結我們就可以獲得到知識星球資料。
當然這個具體還是在搭架子,後期需要完善的內容如下:
- 獲取所有星球分組資訊。
- 根據不同的組獲取星球星主的問答,進行摘取。
- 設定定期策略,採集資料,並整理成冊
- 資料整理與分析。
以上暫時是星球爬取內容的規劃,預計在3個月內完成,歡迎大家一起圍觀。
原始碼地址如下:
總結
·END·
路雖遠,行則必至
本文原發於 同名微信公眾號「胖琪的升級之路」,回覆「1024」你懂得,給個讚唄。
微信ID:YoungRUIQ