技巧:面試官:比如有10萬(wàn)個(gè)網(wǎng)站,有什么方法快速的采集到的數據嗎?
優(yōu)采云 發(fā)布時(shí)間: 2020-08-31 21:23采訪(fǎng)者: 例如,有100,000個(gè)網(wǎng)站,有什么方法可以快速采集數據?
Bytedance訪(fǎng)談集(一): Android框架高頻訪(fǎng)談問(wèn)題總結
Bytedance訪(fǎng)談集(二): 項目HR高頻訪(fǎng)談?wù)?/p>
詳細分析數據采集采集體系結構中的每個(gè)模塊
網(wǎng)絡(luò )爬蟲(chóng)的實(shí)現原理和技術(shù)
采集器工程師如何有效地支持數據分析師的工作?
基于大數據平臺的Internet數據采集平臺的基本架構
履帶工程師的成長(cháng)之路
如何在數據采集中建立有效的監控系統?
一個(gè)女孩嘆了口氣: 簡(jiǎn)歷沒(méi)有打包,也沒(méi)有面試機會(huì ). 我該怎么辦?
面試問(wèn)題的摘要,例如面試準備,HR,Android技術(shù)等.
一位網(wǎng)友昨天說(shuō),他最近采訪(fǎng)了幾家公司,并多次問(wèn)了一個(gè)問(wèn)題,每次回答都不是很好.
采訪(fǎng)者: 例如,有100,000個(gè)網(wǎng)站需要采集,您需要采用什么方法快速獲取數據?
要很好地回答這個(gè)問(wèn)題,實(shí)際上,您需要具有足夠的知識和足夠的技術(shù)儲備.
最近,我們每周也在招聘和面試十幾個(gè)人,只有一兩個(gè)人適合. 他們中的大多數人都與此網(wǎng)民處于同一狀況,他們缺乏整體思維,即使是那些擁有三四年工作經(jīng)驗的老司機. 他們具有解決特定問(wèn)題的強大能力,但是很少站在新的層次上逐點(diǎn)思考問(wèn)題.
100,000個(gè)網(wǎng)站的采集范圍已經(jīng)超過(guò)大多數專(zhuān)業(yè)民意監測公司的數據采集范圍. 為了滿(mǎn)足訪(fǎng)問(wèn)者提到的采集要求,我們需要綜合考慮網(wǎng)站從采集到數據存儲的各個(gè)方面,并提出合適的計劃,以達到節省成本,提高工作效率的目的.
下面,我們將從網(wǎng)站集合到數據存儲的各個(gè)方面進(jìn)行簡(jiǎn)要介紹.
1. 100,000個(gè)網(wǎng)站來(lái)自哪里?
通常來(lái)說(shuō),采集的網(wǎng)站是根據公司業(yè)務(wù)的發(fā)展逐漸積累的.
我們現在假設這是一家初創(chuàng )公司的需求. 該公司剛剛成立,所以很多網(wǎng)站基本上都是冷門(mén). 那么,我們如何采集這100,000個(gè)網(wǎng)站呢?有幾種方法:
1)歷史業(yè)務(wù)的積累
無(wú)論是冷門(mén)還是什么,由于需要采集,因此必須有一個(gè)具有這種需求的項目或產(chǎn)品. 相關(guān)人員必須在早期就調查了一些數據源并采集了一些更重要的{mask2}. 這些可以用作我們采集網(wǎng)站和采集的原創(chuàng )*敏*感*詞*.
2)關(guān)聯(lián)網(wǎng)站
在某些網(wǎng)站的底部,通常有一個(gè)與網(wǎng)站相關(guān)的鏈接. 特別是對于政府型網(wǎng)站,通常會(huì )有相關(guān)下級部門(mén)的官方網(wǎng)站.
3)網(wǎng)站導航
某些網(wǎng)站可能出于特定目的(例如排水系統等)采集某些網(wǎng)站,并將其分類(lèi)以進(jìn)行顯示,以便人們可以輕松找到它們. 這些網(wǎng)站可以迅速為我們提供第一批*敏*感*詞*網(wǎng)站. 然后,我們可以通過(guò)網(wǎng)站關(guān)聯(lián)和其他方法獲得更多的網(wǎng)站.
4)搜索引擎
您還可以準備一些與公司業(yè)務(wù)相關(guān)的關(guān)鍵字,在百度和搜狗等搜索引擎中進(jìn)行搜索,并通過(guò)處理搜索結果來(lái)提取相應的網(wǎng)站作為我們的*敏*感*詞*網(wǎng)站.
5)第三方平臺
例如,某些第三方SaaS平臺將有7到15天的免費試用期. 因此,我們可以利用這段時(shí)間來(lái)采集與我們的業(yè)務(wù)有關(guān)的數據,然后從中提取網(wǎng)站作為我們的初始采集*敏*感*詞*.
盡管這種方法是最有效,最快的網(wǎng)站采集方法. 但是,在試用期內,獲得100,000個(gè)網(wǎng)站的可能性非常小,因此需要結合其他方法(例如上述關(guān)聯(lián)網(wǎng)站)來(lái)快速獲得所需的網(wǎng)站.
通過(guò)以上五種方法,我相信我們可以迅速采集我們需要的100,000個(gè)網(wǎng)站. 但是擁有這么多的網(wǎng)站,我們應該如何管理呢?如何知道這是否正常?
兩個(gè). 如何管理十萬(wàn)個(gè)網(wǎng)站?
當我們采集了100,000個(gè)網(wǎng)站時(shí),我們首先要面對的是如何管理,如何配置采集規則,如何監視網(wǎng)站是否正常等等.
1)如何管理
100,000個(gè)網(wǎng)站,如果沒(méi)有專(zhuān)門(mén)的系統來(lái)管理它,那將是一場(chǎng)災難.
同時(shí),由于業(yè)務(wù)需求(例如智能推薦),我們需要在網(wǎng)站上執行一些預處理(例如標記). 此時(shí),將需要一個(gè)網(wǎng)站管理系統.
2)如何配置采集規則
我們在早期采集的100,000個(gè)網(wǎng)站只是首頁(yè). 如果僅將主頁(yè)用作捕獲任務(wù),則只能以很少的信息捕獲到主頁(yè),錯過(guò)捕獲的比率非常高.
如果要使用主頁(yè)的URL來(lái)捕獲整個(gè)站點(diǎn),則它將消耗更多的服務(wù)器資源,并且花費太多. 因此,我們需要配置我們關(guān)注的列并對其進(jìn)行采集.
但是,對于100,000個(gè)網(wǎng)站,如何快速而有效地配置列?當前,我們通過(guò)自動(dòng)解析HTML源代碼來(lái)執行列的*敏*感*詞*配置.
當然,我們也嘗試使用機器學(xué)習來(lái)解決它,但是效果不是很令人滿(mǎn)意.
由于采集的網(wǎng)站需要達到100,000個(gè)級別,因此不得使用xpath和其他精確的定位方法進(jìn)行采集. 否則,當您配置100,000個(gè)網(wǎng)站時(shí),黃花菜會(huì )變冷.
同時(shí),數據采集必須使用通用采集器并使用正則表達式來(lái)匹配列表數據. 在采集文本中,使用算法來(lái)解析時(shí)間和文本等屬性;
3)如何監視
由于有100,000個(gè)網(wǎng)站,所以這些網(wǎng)站每天都會(huì )有網(wǎng)站修訂,列修訂或新列/已刪除列等. 因此,我們需要根據采集的數據情況來(lái)簡(jiǎn)要分析網(wǎng)站的情況.
例如,如果一個(gè)網(wǎng)站幾天沒(méi)有任何新數據,那么肯定有問(wèn)題. 網(wǎng)站已被修改且信息正規化經(jīng)常失敗,或者網(wǎng)站本身存在問(wèn)題.
為了提高采集效率,可以使用單獨的服務(wù)來(lái)定期檢查網(wǎng)站和列的狀況. 一種是檢查網(wǎng)站和該欄是否可以正常訪(fǎng)問(wèn);二是檢查配置的列信息的正則表達式是否正常. 這樣運維人員才能對其進(jìn)行維護.
三,任務(wù)緩存
100,000個(gè)網(wǎng)站,在配置了列之后,采集的輸入URL應該達到百萬(wàn)級. 采集器如何有效地獲取這些條目URL進(jìn)行采集?
如果將這些URL放置在數據庫中(無(wú)論是MySQL還是Oracle),采集器獲取采集任務(wù)的操作都將浪費大量時(shí)間,并大大降低采集效率.
如何解決這個(gè)問(wèn)題??jì)却鏀祿焓鞘走x,例如Redis,Mongo DB等. 通常,采集使用Redis進(jìn)行緩存. 因此,您可以在配置列時(shí)將列信息同步到Redis作為捕獲任務(wù)緩存隊列.
4. 如何網(wǎng)站采集?
這就像您想獲得一百萬(wàn)的年薪. 最大的機會(huì )是去華為,阿里和騰訊等一線(xiàn)制造商,您需要達到一定水平. 這條路注定是困難的.
類(lèi)似地,如果您需要采集數百萬(wàn)個(gè)列表URL,則必須無(wú)法實(shí)現常規方法.
必須使用分布式+多進(jìn)程+多線(xiàn)程. 同時(shí),它需要與內存數據庫Redis等一起緩存,實(shí)現了高效的任務(wù)獲取,并且采集信息已經(jīng)重置;
同時(shí),信息分析(例如發(fā)布時(shí)間和文本)也必須由算法處理. 例如,現在比較流行的GNE,
某些屬性可以在列表采集中獲得,因此請盡量不要將它們與文本放在一起進(jìn)行分析. 例如: 標題. 通常,從列表中獲得標題的準確性比從html信息源代碼中解析出的算法要好得多.
同時(shí),如果有一些特殊的網(wǎng)站或某些特殊需求,我們可以使用定制開(kāi)發(fā)來(lái)處理它.
五個(gè)統一的數據存儲界面
為了保持采集的及時(shí)性,100,000個(gè)網(wǎng)站的采集可能需要超過(guò)十或二十個(gè)服務(wù)器. 同時(shí),在每臺服務(wù)器上部署了N個(gè)采集器,加上一些定制開(kāi)發(fā)的腳本,采集器的總數將達到數百個(gè).
如果每個(gè)采集器/自定義腳本都開(kāi)發(fā)自己的數據保存接口,則會(huì )浪費大量時(shí)間進(jìn)行開(kāi)發(fā)和調試. 而且后續的操作和維護也將是無(wú)后顧之憂(yōu). 尤其是當業(yè)務(wù)發(fā)生變化并且需要調整時(shí). 因此,仍然需要一個(gè)統一的數據存儲接口.
由于數據存儲接口是統一的,因此當我們需要對數據進(jìn)行一些特殊處理(例如: 清理,校正等)時(shí),無(wú)需修改每個(gè)采集存儲部分,只需修改接口和重新部署.
快速,方便,快捷.
六個(gè). 數據和采集監控
采集的網(wǎng)站數量達100,000個(gè),每天的數據量肯定超過(guò)200萬(wàn). 無(wú)論數據分析算法多么精確,它都無(wú)法達到100%(如果可以達到90%,那就太好了). 因此,數據分析中一定存在異常. 例如: 發(fā)布時(shí)間大于當前時(shí)間,正文收錄相關(guān)新聞信息等.
但是,由于我們已經(jīng)統一了數據存儲接口,所以此時(shí)可以在該接口上執行統一的數據質(zhì)量檢查. 為了優(yōu)化采集器并根據異常情況自定義腳本.
同時(shí),您還可以計算每個(gè)網(wǎng)站或每列的數據采集. 為了能夠及時(shí)判斷當前的采集網(wǎng)站/欄目來(lái)源是否正常,以確保始終有100,000個(gè)有效采集網(wǎng)站.
七,數據存儲
由于每天采集的數據量很大,普通數據庫(例如mysql,Oracle等)不再具有競爭力. 甚至像Mongo DB這樣的NoSql數據庫也不再適用. 目前,ES和Solr等分布式索引是當前的最佳選擇.
關(guān)于是否使用Hadoop和HBase等大數據平臺,取決于具體情況. 在預算小的情況下,您可以先構建分布式索引集群,然后再考慮使用大數據平臺.
為了確保查詢(xún)的響應速度,請嘗試不要將主體信息保存在分布式索引中. 可以保存標題,發(fā)布時(shí)間,URL等內容,以便在顯示列表數據時(shí)可以減少輔助查詢(xún).
在沒(méi)有大數據平臺的情況下,可以使用固定數據標準將文本保存在txt等文件系統中. 大數據平臺隨后上傳之后,可以將其傳輸到HBASE.
八項自動(dòng)化操作和維護
由于服務(wù)器,采集器和自定義腳本的數量眾多,僅依靠手動(dòng)部署,啟動(dòng),更新和操作監視變得非常麻煩,并且容易發(fā)生人為錯誤.
因此,必須有一個(gè)自動(dòng)化的運維系統,該系統可以部署,啟動(dòng),關(guān)閉和運行采集器/腳本,以便它們可以在發(fā)生更改時(shí)迅速做出響應.
“例如,有100,000個(gè)需要采集的網(wǎng)站. 如何快速獲取數據?”如果您能回答這些問(wèn)題,那么毫無(wú)懸念就能得到一個(gè)好報價(jià).
最后,我希望所有正在尋找工作的朋友都能得到滿(mǎn)意的報價(jià)并找到一個(gè)好的平臺.