日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打造轻量级可视化数据爬取工具-菩提

發(fā)布時間:2024/2/28 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打造轻量级可视化数据爬取工具-菩提 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:jiaqiangwang,騰訊 IEG 后臺開發(fā)工程師


背景

在大數(shù)據(jù)及機器學(xué)習(xí)日益火爆的今天,數(shù)據(jù)作為基石發(fā)揮了至關(guān)重要的作用。網(wǎng)頁內(nèi)容爬取作為數(shù)據(jù)的一個重要補充來源,數(shù)據(jù)爬取開發(fā)成了一個必不可少的工作。

在業(yè)界,普遍的做法是采用 scrapy 等框架不斷進行 case by case 的爬取代碼編寫,這種做法在需求量逐漸增大后會出現(xiàn)大量重復(fù)工作、大量針對某個網(wǎng)站或需求開發(fā)的特殊邏輯等,導(dǎo)致技術(shù)不能持續(xù)積累沉淀、開發(fā)耗時長、維護壓力越來越大。

我們在調(diào)研了業(yè)界最新動態(tài)后,決定開發(fā)一款輕量級的可視化定向數(shù)據(jù)爬取工具來解決上述問題。我們將它命名 bodhi,中文名:菩提,寓意在“菩提本無數(shù)(據(jù))”。

本文只是提供一種思路、一種工具,使用者自身需要合規(guī)使用。

同類工具一覽

在數(shù)據(jù)爬取領(lǐng)域,可供選擇的工具非常多,比如以 scrapy 為代表的開源工具包、以 portia、八爪魚為代表的可視化數(shù)據(jù)爬取工具;

下面我們從是否需要使用者有技術(shù)背景、是否支持動態(tài)網(wǎng)頁、是否免費、是否開源、是否能夠靈活支持需求、是否輕量級應(yīng)用幾個方面對上面列舉的工具進行對比。

注:以上對比基于當(dāng)前最新版本,其中,scrapy 1.74, portia 2.08, 八爪魚 8.0。

scrapy 是一個非常優(yōu)秀的開源框架,但是需要編碼,使用技術(shù)門檻較高,跟我們的初衷不符;

portia 是應(yīng)該是第一個開源的可視化 web 數(shù)據(jù)爬取工具,想法非常好,但是僅支持靜態(tài)網(wǎng)頁,沒有對動態(tài)網(wǎng)頁提供支持,在幾乎全是動態(tài)網(wǎng)頁的今天明顯不能完成大多數(shù)頁面的提取;

八爪魚是國內(nèi)使用量最大的商業(yè)數(shù)據(jù)爬取工具之一,提供客戶端,其免費版無法做到大規(guī)模、7*24 小時的持續(xù)爬取,無法滿足工業(yè)化應(yīng)用;

為了更快更好的支撐業(yè)務(wù)上不斷增長的需求,我們期望有一個適配性很廣,能夠大規(guī)模不間斷爬取數(shù)據(jù)的工具幫我們解決工作中遇到的問題。2018 年底,在公司內(nèi)外沒有找到一個可以充分滿足需求的數(shù)據(jù)爬取工具的情況下,我們在充分調(diào)研了 portia 和八爪魚后,期望能夠自研一款可以支持瀏覽器即開即用的、低技術(shù)門檻、能夠支持絕大多數(shù)需求、成熟后能夠開源的可視化網(wǎng)頁數(shù)據(jù)爬取工具。

技術(shù)選型

我們明確了目標(biāo):輕量、低門檻、通用性強的網(wǎng)頁數(shù)據(jù)爬取工具。

輕量:我們拋棄客戶端,采用網(wǎng)頁來實現(xiàn)即開即用;將功能邊界限定到只做網(wǎng)頁文字的下載功能,放棄不必要的周邊功能使其更加簡潔;

低門檻:盡量模擬人們在瀏覽網(wǎng)頁時的使用習(xí)慣完成配置,做到產(chǎn)品同學(xué)可以自行完成需求開發(fā);

通用性強:采用無頭瀏覽器模擬 web 瀏覽器,整體上比 http 請求更通用。

bodhi 工具簡介

bodhi(菩提)是一款可視化的數(shù)據(jù)爬取工具,力求讓用戶通過模擬日常瀏覽網(wǎng)頁習(xí)慣就可以在網(wǎng)頁上提取自己所需要的數(shù)據(jù)。

人類在上網(wǎng)時主要通過鼠標(biāo)的點擊、滾動以及鍵盤的輸入來完成頁面瀏覽,大家已經(jīng)習(xí)慣這種使用方式,我們在這基礎(chǔ)上進行抽象總結(jié),除了提供基礎(chǔ)的點擊、滾動、輸入動作,還提供了更高級的選擇相似元素、提取內(nèi)容、翻頁等操作方便用戶更加便捷的完成任務(wù)配置;

bodhi 采用流程圖模式,大多數(shù)情況下,用戶不需要對流程圖進行直接操作,流程圖更多的是作為一個可視化的配置,用戶可以通過可視化的點選網(wǎng)頁上的元素來完成后續(xù)操作,完全符合人工瀏覽網(wǎng)頁的思維習(xí)慣。

這里通過一些關(guān)鍵詞介紹一下 bodhi,具體的技術(shù)細(xì)節(jié)由于篇幅有限這里不會展開。

嵌入式頁面

我們采用 B/S 架構(gòu),需要在我們的頁面內(nèi)嵌欲爬取的頁面,這里我們并沒有采用 iframe 直接嵌入頁面,因為這樣做,一方面有些網(wǎng)站不能直接通過 iframe 打開,另一方面如果使用 iframe,用戶在 iframe 中進行點擊(比如打開另一個網(wǎng)頁)、輸入會產(chǎn)生不可控的行為。

我們采用在后臺通過無頭瀏覽器模擬用戶打開的瀏覽器,可以把它理解為一個“傀儡”,這個“傀儡”根據(jù)用戶發(fā)送的 URL 打開網(wǎng)頁,并監(jiān)聽網(wǎng)頁變化,將二次加工后的網(wǎng)頁內(nèi)容實時增量同步到前端進行展示。用戶后續(xù)仍然可以繼續(xù)發(fā)送點擊、輸入等動作指令,操控“傀儡”所打開的網(wǎng)頁。

下圖紅框部分為采用上述方式打開的一個網(wǎng)頁。

靈活選取

例如我想要選擇下圖中的所有具體游戲,而非游戲類型(單機游戲)或具體站點(愛玩),就可以得到下圖所示的圖例,其中紅色及藍(lán)色代表已經(jīng)選中的內(nèi)容。

bodhi可以通過讓用戶不斷的選擇反選操作來最終確認(rèn)需要爬取的內(nèi)容。

智能提取

大多數(shù)網(wǎng)頁都是一篇文章,而這些文章的排版又不盡相同,如果通過適配不同的文章模板來提取內(nèi)容,必將導(dǎo)致工作量大增,所以有必要提供一個相對智能的網(wǎng)頁內(nèi)容提取組件完成這個工作。

下圖紅框部分,bodhi 通過一個“文章識別”組件可以快速提取文章內(nèi)容。

循環(huán)翻頁

一般網(wǎng)頁都存在翻頁的 case,對于存在“下一頁”的情況,我們可以通過不斷點擊“下一頁”完成所有內(nèi)容的遍歷,但是對于沒有“下一頁”按鈕的情況就會比較復(fù)雜,所以我們做了一個循環(huán)翻頁功能,可以應(yīng)對所有翻頁的情況。

比如下圖的情況,只提供了“最后一頁”按鈕,在翻頁過程中,會不斷有新的頁碼出現(xiàn),如果沒有智能翻頁功能將會非常痛苦。



調(diào)試

為了保證用戶在配置及后續(xù)維護過程中知道到底做了什么,存在什么問題,我們也做了一個簡版的調(diào)試功能,幫助用戶方便調(diào)試。下圖紅框部分為調(diào)試界面。

分布式部署

采用無頭瀏覽器的一個弊端就是爬取效率相對低下,為了保障爬取效率,bodhi 一方面進行了基于騰訊云的分布式部署,同時在單機上也對單爬取任務(wù)進行并行切分來實現(xiàn)加速。

robots 協(xié)議支持

robots 協(xié)議作為網(wǎng)站與爬蟲之間的君子協(xié)議,用于保證網(wǎng)站的隱私等信息。我們也支持在后臺做數(shù)據(jù)爬取時遵守 robots 協(xié)議,讓 bodhi 成為一個文明、君子的工具。


存在問題及后續(xù)規(guī)劃

當(dāng)然,我們的 bodhi 并非完美,最多算是一個剛剛及格的工具,有很多待完善的地方,比如我們天然不支持頁面嵌入 iframe 內(nèi)容的爬取、操作流暢度上有很大提升空間等,這些都是我們后續(xù)需要繼續(xù)努力完善的。

我們也希望更多的人能夠使用它提高工作效率,更多對數(shù)據(jù)爬取技術(shù)感興趣的人可以一起開發(fā)、完善 bodhi,打造一個更強大的數(shù)據(jù)爬取工具!

總結(jié)

以上是生活随笔為你收集整理的打造轻量级可视化数据爬取工具-菩提的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。