<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從 0 到 1 帶你搭建 Java 并發(fā)爬蟲框架(一):爬蟲原理和流程

          共 1835字,需瀏覽 4分鐘

           ·

          2020-08-14 18:03

          私下里有不少童鞋在問爬蟲框架的問題,這也是測(cè)試童鞋轉(zhuǎn)測(cè)試開發(fā)或開發(fā)一個(gè)比較好的練手項(xiàng)目,為什么這么說呢?如果你之前已經(jīng)有WEB自動(dòng)化測(cè)試或接口自動(dòng)化測(cè)試的經(jīng)驗(yàn),那么很多技術(shù)點(diǎn)在爬蟲中也能夠應(yīng)用得上,比如頁(yè)面分析,元素定位,接口HTTP請(qǐng)求,JSON解析,頁(yè)面解析等等……此外通過這個(gè)實(shí)戰(zhàn)項(xiàng)目,你還可能學(xué)會(huì)爬蟲的原理和流程,如何整合項(xiàng)目,如何使用并發(fā),數(shù)據(jù)如何處理,分層框架如何搭建等等……接下來這段時(shí)間就從實(shí)戰(zhàn)的角度分享下如何從 0 到 1 一步步搭建 Java 并發(fā)爬蟲框架,大概的篇章是這樣的(具體會(huì)根據(jù)篇幅大小來增減):

          入門篇:

          一、了解爬蟲的原理與流程

          實(shí)戰(zhàn)篇:

          二、新建 SpringBoot 項(xiàng)目

          三、構(gòu)建免費(fèi)代理服務(wù)

          四、HTTP 請(qǐng)求封裝

          四、實(shí)現(xiàn)業(yè)務(wù)爬取邏輯

          五、集成Bomb云數(shù)據(jù)庫(kù)

          六、構(gòu)建任務(wù)調(diào)度

          為什么要了解爬蟲?

          “數(shù)據(jù)是新一輪技術(shù)革命最重要的生產(chǎn)資料”,在互聯(lián)網(wǎng)行業(yè)可以近似的說擁有了數(shù)據(jù)就擁有了市場(chǎng)。爬蟲在互聯(lián)網(wǎng)上無處不在,國(guó)內(nèi)外的各大搜索引擎都是基于爬蟲抓取信息后檢索的,所以說 “互聯(lián)網(wǎng)上 50% 的流量都是爬蟲創(chuàng)造的” 這一點(diǎn)都不為過。近 2 年爬蟲技術(shù)跟隨著大數(shù)據(jù)的火熱逐漸從臺(tái)后走到臺(tái)前,被越來越多的人所熟知,也被應(yīng)用的越來越廣泛,小到個(gè)人利用爬蟲抓取數(shù)據(jù)分析建模,大到利用爬蟲構(gòu)建公司的內(nèi)容和數(shù)據(jù)生態(tài)圈。所以爬蟲已經(jīng)成為一門 “平民化” 的技術(shù),大家在工作和學(xué)習(xí)中都有用得著的地方。

          爬蟲的原理與流程

          本篇重點(diǎn)是要講述如何構(gòu)建爬蟲框架,但考慮到大家的對(duì)爬蟲的了解程度不同,所以還是稍微帶一下爬蟲的原理和流程。

          爬蟲的原理其實(shí)很簡(jiǎn)單,其實(shí)跟在瀏覽器中輸入一串 URL 地址并按下回車鍵后發(fā)生的事情是一樣的(對(duì)于這個(gè)問題的理解有興趣的童鞋可以參看:在瀏覽器中輸入 URL 地址并回車后都發(fā)生了什么?),只不過爬蟲的這些操作是用代碼來實(shí)現(xiàn)的。

          爬蟲的主要目的就是爬取目標(biāo)數(shù)據(jù),但是為了達(dá)到這個(gè)目的,還需要很多輔助工作要做,比如前期的目標(biāo) URL 提取或頁(yè)面分析,繞過登錄限制,以及爬蟲身份的隱藏、爬蟲的調(diào)度和容錯(cuò)處理等,還有最后的數(shù)據(jù)清洗和入庫(kù)。一個(gè)完整的爬蟲程序應(yīng)該是包含分析、爬取到入庫(kù)等一系列流程的,為了直觀我就畫一個(gè)圖來表示:

          當(dāng)然上面只是一個(gè)單線的爬蟲流程,如果考慮到分布式和并發(fā)功能等,還需要繼續(xù)加上任務(wù)調(diào)度功能。比如前期已經(jīng)解析出了 URL,并發(fā)現(xiàn)了 URL 的數(shù)據(jù)分頁(yè)關(guān)系,假定用 pageNumber 來表示分頁(yè) index,那么完全可以一次并發(fā) 10 個(gè)線程去跑 10 個(gè)任務(wù),每個(gè)任務(wù)就是爬取指定 URL 的的數(shù)據(jù),這樣就可以大大提高爬取效率。

          此外,前面還提到過容錯(cuò)處理,這里也說明一下,爬蟲在爬取過程中有時(shí)可能會(huì)遇到突發(fā)異常,比如目標(biāo)服務(wù)器異常、網(wǎng)絡(luò)異常、對(duì)方實(shí)施了反扒策略等,這種情況我們也需要分別考慮到,通常需要加入重試機(jī)制,你可以自己定義什么類型的異常需要加入重試,比如請(qǐng)求失敗,這可能被對(duì)方屏蔽了,也可能網(wǎng)絡(luò)出現(xiàn)了震蕩。所以這時(shí)候重試 2 次看看,如果重試還是失敗,那么就可以放棄這次爬取任務(wù)了,你可以將失敗的任務(wù)記錄下來,后面等空閑或等實(shí)現(xiàn)失敗任務(wù)定時(shí)調(diào)度功能,等待下一次的再次調(diào)度;并設(shè)置一個(gè)最大的調(diào)度失敗次數(shù)(比如 3),超過這個(gè)次數(shù),移除這個(gè)任務(wù),以后都不用考慮了。

          另外對(duì)于頁(yè)面數(shù)據(jù)解析,要分 2 種情況,提取的種子 URL 請(qǐng)求后返回的是 JSON 或 XML 格式的,直接用 FastJson 來解析 JSON 即可,可是通常沒有這么方便,很多時(shí)候需要我們?nèi)ソ馕鲰?yè)面的 HTML 文檔,這時(shí)候就需要用到 jsoup 來解析頁(yè)面,從而拿到我們需要的數(shù)據(jù)。這些流程中具體的功能和問題都會(huì)在后面的框架搭建時(shí)體現(xiàn)。

          下篇預(yù)告:爬蟲框架和項(xiàng)目搭建


          測(cè)試開發(fā)棧

          軟件測(cè)試開發(fā)合并必將是趨勢(shì),不懂開發(fā)的測(cè)試、不懂測(cè)試的開發(fā)都將可能被逐漸替代,因此前瞻的技術(shù)儲(chǔ)備和知識(shí)積累是我們以后在職場(chǎng)和行業(yè)脫穎而出的法寶,期望我們的經(jīng)驗(yàn)和技術(shù)分享能讓你每天都成長(zhǎng)和進(jìn)步,早日成為測(cè)試開發(fā)棧上的技術(shù)大牛~~


          長(zhǎng)按二維碼/微信掃描關(guān)注


          歡迎加入QQ群交流和提問:427020613

          互聯(lián)網(wǎng)測(cè)試開發(fā)一站式全棧分享平臺(tái)


          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99乱伦视频 | 免费黄色电影在线播放 | www,亚洲黄色片 | 影音先锋色资源站 | 69视频免费观看 |