創新實訓總結報告

1.分工
我在我們的創新實訓隊伍當中負責了知乎和頭條數據的爬取和整理,實現了給定一個關鍵詞從而查詢提供相關問題的內容,更新時間,評論內容,評論數目以及贊同數量等其它數據屬性的爬蟲,通過爬取的數據存放到mysql中,通過構建本地Elasticsearch,kibana和logstash以及搭建雲ELK服務實現了大批量數據的搜索功能,展示功能和分佈式功能,能夠提供問題排查,監控和預警,關聯時間和數據分析的功能,從而爲項目提供紮實的數據存儲和查詢服務。

  1. 實訓主要工作
    ①頭條數據的爬取,頭條數據的爬取是可以在搜索界面找到相關數據的請求,通過分析network數據的請求找到請求的接口。
    在這裏插入圖片描述
    構造請求頭,僞造成瀏覽器請求接口數據,實現了頭條數據的獲取,通過分析其json請求獲得了新聞內容
    在這裏插入圖片描述
    但是,有一個難點在於評論的獲取,因爲在這個請求的接口中返回的數據是不包含評論的,是隻有時間和內容的,可以通過這個相關新聞的網頁的html元素去獲取評論內容但是是無法獲取所有熱評的,需要點擊獲取評論,因此我通過不斷查找相關接口,找到了評論接口,通過對url進行構造從而獲得所有評論。

②知乎數據的爬取。知乎數據的爬取相較於頭條爬取來說比較難,通過不斷地分析和查找資料,發現了知乎是存在相關的數據請求接口的,但是經過數據爬取後會報錯。
在這裏插入圖片描述
這是一個相當令我困惑的一個點我的請求cookie是正確和合適版本的客戶端但是問什麼會返回這樣一個參數,通過查閱資料x-zse-83:,x-zse-86:是必須加在請求頭中才能直接訪問的,加了之後獲取的數據確實不一樣,但是還是無法獲得正確的json數據,爲此絞盡腦汁,找到了另一條出路,通過不斷的分析,發現知乎提供的數據接口是比較奇怪的,爲了做到反爬取,知乎對於同一個查詢返回的數據接口是不同的,也就是第一個是沒有權限的訪問,必須要某種要求才能訪問,但是其它的後續的接口格式是一樣的返回同樣的數據,但是沒有權限要求,從而實現了數據的爬取。
爬取的數據還是有問題,其中使用utf-8的格式還是GKB-10的格式都會導致數據出錯,這和頭條的不太一樣,我頭開始使用的是將數據報錯的編碼全部替換爲空格,實現了數據的寫入,但是存在着一點數據的內容是不完整的,可能會給隊伍後續的處理造成影響,因此,反覆更改編碼終於讓我找到了解決方案,修改IDE工具的編碼方式爲utf-8成功的解決了問題。成功讀取了數據.
讀取到數據是很好的,但是讀取的數據多而且雜亂,必須進行處理,分析json文件處理後得到了兩種類型的數據一種是answer既包含了數據又包含了問題,另一種是question包含了問題和問題的相關屬性,二者是不一樣的,必須分開寫到兩個文件裏面。

③實現了flask項目的初建,搭建mysql環境,創建相關數據庫和表,將將爬取的處理好的數據通過flask的pymysql寫到mysql中,爲下一步elasticsearch的搭建打下一個初步基礎。
在這裏插入圖片描述

④ELK集羣的本地搭建。因爲mysql做查詢是相當慢的,如果數據量特別大時,響應速度會變得無法接受,而使用elasticsearch可以TB級中的數據可以返回檢索結果。此外要實現在做中文搜索時,組合詞檢索在數據庫是很難完成的。而Elasticsearch支持中文分詞插件,很好地解決了問題。Elasticsearch支持全文搜索和相關度評分。在使用數據庫進行查詢數據時,很多時候都是通過工程代碼或者命令端完成,即使使用現成的工具比如navicat也是需要使用sql語法的比較麻煩。數據庫自身通常不帶可視化界面。Elasticsearch集羣中擁有可視化Kibana界面提升了研發的速度。Kibana可視化界面完美支持Elasticsearch。能夠在上面快速地進行概念驗證,分析結果,提高開發效率。因此我覺得使用由於對ELK的不熟悉,通過在本地構建分佈式搜索引擎ELK做一個初步的試探。首先,必須在本地安裝java,由於elasticsearch已經更新到7.x版本,他要求是java必須是11的版本,但是我發現其是可以使用java8運行的。接下來就是elk的本地部署,查閱資料,進入官網分別找到elasticsearch,kibana,logstash這3個服務,下載照着教程一步一步安裝好這3個服務,做到了3個服務的正常運行。
在這裏插入圖片描述
在這裏插入圖片描述

安裝好後對其進行配置,由於它是分佈式的搜索引擎,爲了充分利用其性能我在本地做了一個僞分佈的分佈式搜索引擎,通過修改配置文件,使用本機的三個端口進行通訊,本機的三個端口進行數據傳輸,通過爲每一個服務分佈4G的內存達到了僞分佈的目的,在kibana中創建mapping,實現數據的存儲,由於elasticsearch默認的分詞器效果比較差,就是純粹的字的切分,需要引入額外的分詞模塊,比如ik分詞器,通過到github上的ik分詞器下載相關的文件,爲es引入合適的中文分詞插件。並且利用logstash的pipeline實現mysql數據同步到es當中去,修改配置文件。
在這裏插入圖片描述
將遠程mysql傳輸到es中。進入kibana創建index pattern實現數據的查詢。
在這裏插入圖片描述
在kibana界面通過專有的查詢實現了mysql的取代

⑤ELK部署到雲端,由於項目構建的需要,我們本地進行數據傳輸受到了一些限制,應要求,將其部署到雲端,首先我做了初步的嘗試在阿里雲上做了初步
的els的配置,但是在其配置中,我發現了阿里實際上直接提供了ELK服務的構建,爲此,我就不再糾結於ECS服務器上部署ELK服務了,直接購買相關的服務,我可以稱作是這個真正的先行者了,因爲百度根本找不到相關的東西,阿里雲上的說明也是已知半解扯得亂七八糟,看也看不懂個,經過不斷的艱難嘗試,終於實現了在阿里雲上購買了ELK全家桶。
購買的ES實例。
在這裏插入圖片描述
購買的logstash實例。
在這裏插入圖片描述
我購買的雖然是比較次,但是已經實現了多節點的分佈式部署,包含3個數據節點,一個kibana節點,還有一個logstash服務打開ES實例的公網地址,實現外網訪問,爲es安裝合適的插件,通過遠程打開kibana進行數據處理和map
ping創建。使用logstash實例創建管道,實現數據的傳輸同步,
在這裏插入圖片描述
通過安裝阿里的sql插件,實現數據的查詢不需要使用ES複雜的查詢語句,可以直接使用sql的數據庫查詢語法直接查詢數據。
同步部署在雲端,實現了遠程數據寫入和查詢,還實現了mysql數據的同步。

⑥flask中python接入elasticsearch實現數據的管理。由於同學標淮爲創建完先寫到這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章