
response
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式與流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 306 次瀏覽 ? 2020-05-11 08:03
本發(fā)明涉及網(wǎng)路爬蟲(chóng)領(lǐng)域,具體涉及基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取技巧。
背景技術(shù):
現有的爬蟲(chóng)技術(shù)獲取目標服務(wù)器數據的方法為通過(guò)HTTP庫向第三方服務(wù)器發(fā)起懇求,即發(fā)送一個(gè)Request,請求可以包含額外的headers等信息,等待第三方服務(wù)器響應,等待獲取第三方服務(wù)器響應內容:如果第三方服務(wù)器能正常響應,會(huì )得到一個(gè)Response,Response的內容便是所要獲取的頁(yè)面內容,類(lèi)型可能有HTML,JSON字符串,二進(jìn)制數據(如圖片視頻)等類(lèi)型,這種方式的缺點(diǎn)是由爬蟲(chóng)服務(wù)器直接懇求第三方服務(wù)器,容易導致爬蟲(chóng)服務(wù)器的負載過(guò)大,一旦第三方服務(wù)器有反爬蟲(chóng)機制如:檢查IP訪(fǎng)問(wèn)情況,一個(gè)IP假如短時(shí)間內超過(guò)了指定的次數都會(huì )被限制訪(fǎng)問(wèn)或嚴重情況下封殺網(wǎng)路IP導致難以訪(fǎng)問(wèn)。因此對于服務(wù)器的維護和更新形成了極大的困難。而且這些方式有一明顯缺點(diǎn)就是難以應用在現有流行的個(gè)人電子產(chǎn)品上,如手機、個(gè)人平板筆記本等聯(lián)通終端,只能在服務(wù)器上使用,應用范圍單一早已不是太符合現有多電子設備的社會(huì )。
技術(shù)實(shí)現要素:
鑒于背景技術(shù)的不足,本發(fā)明是基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式,所要解決的技術(shù)問(wèn)題是傳統的爬蟲(chóng)服務(wù)器直接訪(fǎng)問(wèn)目標服務(wù)器形式中,爬蟲(chóng)服務(wù)器多樣化程度高,可移植性差、維護和更新太困難,且頻繁爬取數據并上傳到爬蟲(chóng)服務(wù)器容易被具有反爬蟲(chóng)的目標服務(wù)器永久封鎖IP,也對爬蟲(chóng)服務(wù)器引起很大壓力,且基于瀏覽器的爬蟲(chóng)腳本對于用戶(hù)來(lái)說(shuō)并不友好,每次執行新的爬蟲(chóng)任務(wù)時(shí)須要重新下載爬蟲(chóng)腳本,會(huì )被殺毒軟件刺死。
為實(shí)現上述技術(shù)目的,本發(fā)明提供了如下技術(shù)方案:
基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據并實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器,然后由爬蟲(chóng)服務(wù)器解析采集的目標服務(wù)器數據。
爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據。
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的爬取方式,其特點(diǎn)在于包括如下步驟:
S1:APP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求;
S2:所述爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,并向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列;
S3:判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列按次序拼接,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端;
S4:APP客戶(hù)端解析Request特定參數并判定是否須要繼續爬取數據,如須要就向目標服務(wù)器發(fā)起懇求獲取Response;不需要則停止互聯(lián)網(wǎng)爬蟲(chóng)回到步驟S1重新配置爬取任務(wù);
S5:APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,并成功響應后并攜帶目標服務(wù)器返回的Response,APP客戶(hù)端實(shí)時(shí)向文件服務(wù)器上傳Response,應用服務(wù)器按照解析規則定時(shí)解析文件服務(wù)器中的Response文件,并將解析后的數據保存到應用服務(wù)器的數據庫中;
S6:爬蟲(chóng)服務(wù)器解析Response并更改隊列狀態(tài),繼續執行第S2步。
步驟S4中所述Response的狀態(tài)碼為403時(shí),或是爬蟲(chóng)服務(wù)器校準Response不符合校準規則,則舍棄這次爬蟲(chóng)懇求。
步驟S5中的所述數據庫包含關(guān)系型數據庫和面向文檔的非關(guān)系型數據庫,與用戶(hù)狀態(tài)相關(guān)且之后會(huì )發(fā)生變化的數組保存在關(guān)系型數據庫中,不與狀態(tài)相關(guān)多用于查詢(xún)的數據通過(guò)構建索引存于非關(guān)系數據庫中。
本發(fā)明與現有技術(shù)相比所具有的有益療效是:將爬蟲(chóng)從傳統的服務(wù)端轉移到移動(dòng)端上,爬蟲(chóng)程序嵌套在A(yíng)PP客戶(hù)端里,本發(fā)明采用APP內嵌入爬蟲(chóng)sdk交互代碼形式,安裝了該APP的移動(dòng)端可作為一個(gè)子節點(diǎn)控制爬蟲(chóng)的啟動(dòng),服務(wù)器端持續監控協(xié)調各個(gè)爬蟲(chóng)的工作,及時(shí)接收爬蟲(chóng)回傳的有用信息,通過(guò)構建和維護數據庫對接收到的回傳信息進(jìn)行儲存。本APP客戶(hù)端爬蟲(chóng)顯著(zhù)減少服務(wù)器端的運算負荷app爬蟲(chóng)軟件,且所有安裝APP的移動(dòng)端都有不同的IP地址,爬蟲(chóng)服務(wù)器借助移動(dòng)端的IP地址抓取目標服務(wù)器的數據,在目標服務(wù)器有反爬蟲(chóng)機制時(shí),這種由APP客戶(hù)端和目標服務(wù)器交互的形式更象是人類(lèi)在操作(網(wǎng)絡(luò )懇求行為本身就是人類(lèi)操作電子設備發(fā)起懇求獲取資源展示給人類(lèi)觀(guān)看)。因為這些懇求方法本身就是由用戶(hù)的電子設備發(fā)起的網(wǎng)路懇求在獲取資源有效地解決了IP被封的問(wèn)題;采用客戶(hù)機/和服務(wù)器(c/s)模式,更具有擴展性和可移植性,相對于采用瀏覽器端和服務(wù)端(b/s)模式而言,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需多次下載任務(wù)腳本,有效防止被殺毒軟件誤傷的風(fēng)險。
附圖說(shuō)明
本發(fā)明有如下附圖:
圖1為本發(fā)明的爬蟲(chóng)工作流程圖;
圖2為本發(fā)明的爬蟲(chóng)系統結構圖。
具體施行方法
本施行例中的基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服務(wù)器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,該爬蟲(chóng)sdk可移植能力強,不依賴(lài)瀏覽器。APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器app爬蟲(chóng)軟件,爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據,且訪(fǎng)問(wèn)頻度不超過(guò)目標服務(wù)器限制的訪(fǎng)問(wèn)頻度上限,一般不超過(guò)每秒10次,這種APP客戶(hù)端可以應用在更多的聯(lián)通終端上,每個(gè)聯(lián)通終端都提供一個(gè)不同的IP地址,這樣原理上目標服務(wù)器未能完全封殺聯(lián)通終端的IP地址。
圖1是本施行例的基于A(yíng)PP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求。爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,會(huì )向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列。判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端,Request懇求參數包含的必要參數:URL、Method、Headers、Form表單等。APP客戶(hù)端解析Request特定參數(根據后端前端約定好的特定參數判定是否須要繼續爬取數據),如須要就向目標服務(wù)器發(fā)起懇求獲取Response。通過(guò)模仿人的行為訪(fǎng)問(wèn)目標服務(wù)器來(lái)避免反爬蟲(chóng)機制的IP限制,如果不需要繼續爬取則停止懇求目標服務(wù)器之后回到初始狀態(tài)等待爬蟲(chóng)服務(wù)器重新配置爬取任務(wù)。APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,成功響應后并攜帶目標服務(wù)器返回的Response實(shí)時(shí)上傳到文件服務(wù)器,爬蟲(chóng)服務(wù)器校驗Response并更改隊列狀態(tài),繼續判定是否生成相應的懇求隊列。同時(shí)解析服務(wù)器按照解析規則(爬取數據不同須要配置不同的解析規則,將解析規則存在MySQL數據中,項目啟動(dòng)后緩存在Redis數據庫中,Redis數據庫為非關(guān)系型數據庫,效率很高,為爬蟲(chóng)系統做擴充打算。)定時(shí)解析文件服務(wù)器中封裝的Response文件。并將解析后的符合解析規則與用戶(hù)相關(guān)的數組數據存儲在MySQL數據庫中,解析服務(wù)器解析Response并更改解析狀態(tài)。
圖2是本施行例的基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的系統結構圖,集成爬蟲(chóng)sdk的APP安裝在不同的移動(dòng)端上就構成了本爬蟲(chóng)系統的一部分。與傳統的分布式爬蟲(chóng)系統服務(wù)器端相比,本發(fā)明的服務(wù)器子系統毋須為爬蟲(chóng)提供其運行所需的運算(CPU)資源和IP資源,本發(fā)明的爬蟲(chóng)占用的這兩種資源都取自聯(lián)通客戶(hù)端,且與基于瀏覽器的爬蟲(chóng)系統相比,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需按照不同的爬取任務(wù)多次下載爬蟲(chóng)任務(wù)腳本,節省流量,有效防止被殺毒軟件誤傷的風(fēng)險;實(shí)時(shí)將爬蟲(chóng)客戶(hù)端從目標服務(wù)器上得到的Response數據上傳到文件服務(wù)器中,定時(shí)由應用服務(wù)器解析后并持久保存到數據庫中這樣可避免基于瀏覽器的爬蟲(chóng)腳本因嚴禁瀏覽器緩存而未能完整地保存目標服務(wù)器返回的數據的問(wèn)題。 查看全部

本發(fā)明涉及網(wǎng)路爬蟲(chóng)領(lǐng)域,具體涉及基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取技巧。
背景技術(shù):
現有的爬蟲(chóng)技術(shù)獲取目標服務(wù)器數據的方法為通過(guò)HTTP庫向第三方服務(wù)器發(fā)起懇求,即發(fā)送一個(gè)Request,請求可以包含額外的headers等信息,等待第三方服務(wù)器響應,等待獲取第三方服務(wù)器響應內容:如果第三方服務(wù)器能正常響應,會(huì )得到一個(gè)Response,Response的內容便是所要獲取的頁(yè)面內容,類(lèi)型可能有HTML,JSON字符串,二進(jìn)制數據(如圖片視頻)等類(lèi)型,這種方式的缺點(diǎn)是由爬蟲(chóng)服務(wù)器直接懇求第三方服務(wù)器,容易導致爬蟲(chóng)服務(wù)器的負載過(guò)大,一旦第三方服務(wù)器有反爬蟲(chóng)機制如:檢查IP訪(fǎng)問(wèn)情況,一個(gè)IP假如短時(shí)間內超過(guò)了指定的次數都會(huì )被限制訪(fǎng)問(wèn)或嚴重情況下封殺網(wǎng)路IP導致難以訪(fǎng)問(wèn)。因此對于服務(wù)器的維護和更新形成了極大的困難。而且這些方式有一明顯缺點(diǎn)就是難以應用在現有流行的個(gè)人電子產(chǎn)品上,如手機、個(gè)人平板筆記本等聯(lián)通終端,只能在服務(wù)器上使用,應用范圍單一早已不是太符合現有多電子設備的社會(huì )。
技術(shù)實(shí)現要素:
鑒于背景技術(shù)的不足,本發(fā)明是基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式,所要解決的技術(shù)問(wèn)題是傳統的爬蟲(chóng)服務(wù)器直接訪(fǎng)問(wèn)目標服務(wù)器形式中,爬蟲(chóng)服務(wù)器多樣化程度高,可移植性差、維護和更新太困難,且頻繁爬取數據并上傳到爬蟲(chóng)服務(wù)器容易被具有反爬蟲(chóng)的目標服務(wù)器永久封鎖IP,也對爬蟲(chóng)服務(wù)器引起很大壓力,且基于瀏覽器的爬蟲(chóng)腳本對于用戶(hù)來(lái)說(shuō)并不友好,每次執行新的爬蟲(chóng)任務(wù)時(shí)須要重新下載爬蟲(chóng)腳本,會(huì )被殺毒軟件刺死。
為實(shí)現上述技術(shù)目的,本發(fā)明提供了如下技術(shù)方案:
基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據并實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器,然后由爬蟲(chóng)服務(wù)器解析采集的目標服務(wù)器數據。
爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據。
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的爬取方式,其特點(diǎn)在于包括如下步驟:
S1:APP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求;
S2:所述爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,并向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列;
S3:判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列按次序拼接,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端;
S4:APP客戶(hù)端解析Request特定參數并判定是否須要繼續爬取數據,如須要就向目標服務(wù)器發(fā)起懇求獲取Response;不需要則停止互聯(lián)網(wǎng)爬蟲(chóng)回到步驟S1重新配置爬取任務(wù);
S5:APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,并成功響應后并攜帶目標服務(wù)器返回的Response,APP客戶(hù)端實(shí)時(shí)向文件服務(wù)器上傳Response,應用服務(wù)器按照解析規則定時(shí)解析文件服務(wù)器中的Response文件,并將解析后的數據保存到應用服務(wù)器的數據庫中;
S6:爬蟲(chóng)服務(wù)器解析Response并更改隊列狀態(tài),繼續執行第S2步。
步驟S4中所述Response的狀態(tài)碼為403時(shí),或是爬蟲(chóng)服務(wù)器校準Response不符合校準規則,則舍棄這次爬蟲(chóng)懇求。
步驟S5中的所述數據庫包含關(guān)系型數據庫和面向文檔的非關(guān)系型數據庫,與用戶(hù)狀態(tài)相關(guān)且之后會(huì )發(fā)生變化的數組保存在關(guān)系型數據庫中,不與狀態(tài)相關(guān)多用于查詢(xún)的數據通過(guò)構建索引存于非關(guān)系數據庫中。
本發(fā)明與現有技術(shù)相比所具有的有益療效是:將爬蟲(chóng)從傳統的服務(wù)端轉移到移動(dòng)端上,爬蟲(chóng)程序嵌套在A(yíng)PP客戶(hù)端里,本發(fā)明采用APP內嵌入爬蟲(chóng)sdk交互代碼形式,安裝了該APP的移動(dòng)端可作為一個(gè)子節點(diǎn)控制爬蟲(chóng)的啟動(dòng),服務(wù)器端持續監控協(xié)調各個(gè)爬蟲(chóng)的工作,及時(shí)接收爬蟲(chóng)回傳的有用信息,通過(guò)構建和維護數據庫對接收到的回傳信息進(jìn)行儲存。本APP客戶(hù)端爬蟲(chóng)顯著(zhù)減少服務(wù)器端的運算負荷app爬蟲(chóng)軟件,且所有安裝APP的移動(dòng)端都有不同的IP地址,爬蟲(chóng)服務(wù)器借助移動(dòng)端的IP地址抓取目標服務(wù)器的數據,在目標服務(wù)器有反爬蟲(chóng)機制時(shí),這種由APP客戶(hù)端和目標服務(wù)器交互的形式更象是人類(lèi)在操作(網(wǎng)絡(luò )懇求行為本身就是人類(lèi)操作電子設備發(fā)起懇求獲取資源展示給人類(lèi)觀(guān)看)。因為這些懇求方法本身就是由用戶(hù)的電子設備發(fā)起的網(wǎng)路懇求在獲取資源有效地解決了IP被封的問(wèn)題;采用客戶(hù)機/和服務(wù)器(c/s)模式,更具有擴展性和可移植性,相對于采用瀏覽器端和服務(wù)端(b/s)模式而言,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需多次下載任務(wù)腳本,有效防止被殺毒軟件誤傷的風(fēng)險。
附圖說(shuō)明
本發(fā)明有如下附圖:
圖1為本發(fā)明的爬蟲(chóng)工作流程圖;
圖2為本發(fā)明的爬蟲(chóng)系統結構圖。
具體施行方法
本施行例中的基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服務(wù)器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,該爬蟲(chóng)sdk可移植能力強,不依賴(lài)瀏覽器。APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器app爬蟲(chóng)軟件,爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據,且訪(fǎng)問(wèn)頻度不超過(guò)目標服務(wù)器限制的訪(fǎng)問(wèn)頻度上限,一般不超過(guò)每秒10次,這種APP客戶(hù)端可以應用在更多的聯(lián)通終端上,每個(gè)聯(lián)通終端都提供一個(gè)不同的IP地址,這樣原理上目標服務(wù)器未能完全封殺聯(lián)通終端的IP地址。
圖1是本施行例的基于A(yíng)PP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求。爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,會(huì )向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列。判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端,Request懇求參數包含的必要參數:URL、Method、Headers、Form表單等。APP客戶(hù)端解析Request特定參數(根據后端前端約定好的特定參數判定是否須要繼續爬取數據),如須要就向目標服務(wù)器發(fā)起懇求獲取Response。通過(guò)模仿人的行為訪(fǎng)問(wèn)目標服務(wù)器來(lái)避免反爬蟲(chóng)機制的IP限制,如果不需要繼續爬取則停止懇求目標服務(wù)器之后回到初始狀態(tài)等待爬蟲(chóng)服務(wù)器重新配置爬取任務(wù)。APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,成功響應后并攜帶目標服務(wù)器返回的Response實(shí)時(shí)上傳到文件服務(wù)器,爬蟲(chóng)服務(wù)器校驗Response并更改隊列狀態(tài),繼續判定是否生成相應的懇求隊列。同時(shí)解析服務(wù)器按照解析規則(爬取數據不同須要配置不同的解析規則,將解析規則存在MySQL數據中,項目啟動(dòng)后緩存在Redis數據庫中,Redis數據庫為非關(guān)系型數據庫,效率很高,為爬蟲(chóng)系統做擴充打算。)定時(shí)解析文件服務(wù)器中封裝的Response文件。并將解析后的符合解析規則與用戶(hù)相關(guān)的數組數據存儲在MySQL數據庫中,解析服務(wù)器解析Response并更改解析狀態(tài)。
圖2是本施行例的基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的系統結構圖,集成爬蟲(chóng)sdk的APP安裝在不同的移動(dòng)端上就構成了本爬蟲(chóng)系統的一部分。與傳統的分布式爬蟲(chóng)系統服務(wù)器端相比,本發(fā)明的服務(wù)器子系統毋須為爬蟲(chóng)提供其運行所需的運算(CPU)資源和IP資源,本發(fā)明的爬蟲(chóng)占用的這兩種資源都取自聯(lián)通客戶(hù)端,且與基于瀏覽器的爬蟲(chóng)系統相比,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需按照不同的爬取任務(wù)多次下載爬蟲(chóng)任務(wù)腳本,節省流量,有效防止被殺毒軟件誤傷的風(fēng)險;實(shí)時(shí)將爬蟲(chóng)客戶(hù)端從目標服務(wù)器上得到的Response數據上傳到文件服務(wù)器中,定時(shí)由應用服務(wù)器解析后并持久保存到數據庫中這樣可避免基于瀏覽器的爬蟲(chóng)腳本因嚴禁瀏覽器緩存而未能完整地保存目標服務(wù)器返回的數據的問(wèn)題。
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式與流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 306 次瀏覽 ? 2020-05-11 08:03
本發(fā)明涉及網(wǎng)路爬蟲(chóng)領(lǐng)域,具體涉及基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取技巧。
背景技術(shù):
現有的爬蟲(chóng)技術(shù)獲取目標服務(wù)器數據的方法為通過(guò)HTTP庫向第三方服務(wù)器發(fā)起懇求,即發(fā)送一個(gè)Request,請求可以包含額外的headers等信息,等待第三方服務(wù)器響應,等待獲取第三方服務(wù)器響應內容:如果第三方服務(wù)器能正常響應,會(huì )得到一個(gè)Response,Response的內容便是所要獲取的頁(yè)面內容,類(lèi)型可能有HTML,JSON字符串,二進(jìn)制數據(如圖片視頻)等類(lèi)型,這種方式的缺點(diǎn)是由爬蟲(chóng)服務(wù)器直接懇求第三方服務(wù)器,容易導致爬蟲(chóng)服務(wù)器的負載過(guò)大,一旦第三方服務(wù)器有反爬蟲(chóng)機制如:檢查IP訪(fǎng)問(wèn)情況,一個(gè)IP假如短時(shí)間內超過(guò)了指定的次數都會(huì )被限制訪(fǎng)問(wèn)或嚴重情況下封殺網(wǎng)路IP導致難以訪(fǎng)問(wèn)。因此對于服務(wù)器的維護和更新形成了極大的困難。而且這些方式有一明顯缺點(diǎn)就是難以應用在現有流行的個(gè)人電子產(chǎn)品上,如手機、個(gè)人平板筆記本等聯(lián)通終端,只能在服務(wù)器上使用,應用范圍單一早已不是太符合現有多電子設備的社會(huì )。
技術(shù)實(shí)現要素:
鑒于背景技術(shù)的不足,本發(fā)明是基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式,所要解決的技術(shù)問(wèn)題是傳統的爬蟲(chóng)服務(wù)器直接訪(fǎng)問(wèn)目標服務(wù)器形式中,爬蟲(chóng)服務(wù)器多樣化程度高,可移植性差、維護和更新太困難,且頻繁爬取數據并上傳到爬蟲(chóng)服務(wù)器容易被具有反爬蟲(chóng)的目標服務(wù)器永久封鎖IP,也對爬蟲(chóng)服務(wù)器引起很大壓力,且基于瀏覽器的爬蟲(chóng)腳本對于用戶(hù)來(lái)說(shuō)并不友好,每次執行新的爬蟲(chóng)任務(wù)時(shí)須要重新下載爬蟲(chóng)腳本,會(huì )被殺毒軟件刺死。
為實(shí)現上述技術(shù)目的,本發(fā)明提供了如下技術(shù)方案:
基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據并實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器,然后由爬蟲(chóng)服務(wù)器解析采集的目標服務(wù)器數據。
爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據。
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的爬取方式,其特點(diǎn)在于包括如下步驟:
S1:APP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求;
S2:所述爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,并向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列;
S3:判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列按次序拼接,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端;
S4:APP客戶(hù)端解析Request特定參數并判定是否須要繼續爬取數據,如須要就向目標服務(wù)器發(fā)起懇求獲取Response;不需要則停止互聯(lián)網(wǎng)爬蟲(chóng)回到步驟S1重新配置爬取任務(wù);
S5:APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,并成功響應后并攜帶目標服務(wù)器返回的Response,APP客戶(hù)端實(shí)時(shí)向文件服務(wù)器上傳Response,應用服務(wù)器按照解析規則定時(shí)解析文件服務(wù)器中的Response文件,并將解析后的數據保存到應用服務(wù)器的數據庫中;
S6:爬蟲(chóng)服務(wù)器解析Response并更改隊列狀態(tài),繼續執行第S2步。
步驟S4中所述Response的狀態(tài)碼為403時(shí),或是爬蟲(chóng)服務(wù)器校準Response不符合校準規則,則舍棄這次爬蟲(chóng)懇求。
步驟S5中的所述數據庫包含關(guān)系型數據庫和面向文檔的非關(guān)系型數據庫,與用戶(hù)狀態(tài)相關(guān)且之后會(huì )發(fā)生變化的數組保存在關(guān)系型數據庫中,不與狀態(tài)相關(guān)多用于查詢(xún)的數據通過(guò)構建索引存于非關(guān)系數據庫中。
本發(fā)明與現有技術(shù)相比所具有的有益療效是:將爬蟲(chóng)從傳統的服務(wù)端轉移到移動(dòng)端上,爬蟲(chóng)程序嵌套在A(yíng)PP客戶(hù)端里,本發(fā)明采用APP內嵌入爬蟲(chóng)sdk交互代碼形式,安裝了該APP的移動(dòng)端可作為一個(gè)子節點(diǎn)控制爬蟲(chóng)的啟動(dòng),服務(wù)器端持續監控協(xié)調各個(gè)爬蟲(chóng)的工作,及時(shí)接收爬蟲(chóng)回傳的有用信息,通過(guò)構建和維護數據庫對接收到的回傳信息進(jìn)行儲存。本APP客戶(hù)端爬蟲(chóng)顯著(zhù)減少服務(wù)器端的運算負荷app爬蟲(chóng)軟件,且所有安裝APP的移動(dòng)端都有不同的IP地址,爬蟲(chóng)服務(wù)器借助移動(dòng)端的IP地址抓取目標服務(wù)器的數據,在目標服務(wù)器有反爬蟲(chóng)機制時(shí),這種由APP客戶(hù)端和目標服務(wù)器交互的形式更象是人類(lèi)在操作(網(wǎng)絡(luò )懇求行為本身就是人類(lèi)操作電子設備發(fā)起懇求獲取資源展示給人類(lèi)觀(guān)看)。因為這些懇求方法本身就是由用戶(hù)的電子設備發(fā)起的網(wǎng)路懇求在獲取資源有效地解決了IP被封的問(wèn)題;采用客戶(hù)機/和服務(wù)器(c/s)模式,更具有擴展性和可移植性,相對于采用瀏覽器端和服務(wù)端(b/s)模式而言,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需多次下載任務(wù)腳本,有效防止被殺毒軟件誤傷的風(fēng)險。
附圖說(shuō)明
本發(fā)明有如下附圖:
圖1為本發(fā)明的爬蟲(chóng)工作流程圖;
圖2為本發(fā)明的爬蟲(chóng)系統結構圖。
具體施行方法
本施行例中的基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服務(wù)器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,該爬蟲(chóng)sdk可移植能力強,不依賴(lài)瀏覽器。APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器app爬蟲(chóng)軟件,爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據,且訪(fǎng)問(wèn)頻度不超過(guò)目標服務(wù)器限制的訪(fǎng)問(wèn)頻度上限,一般不超過(guò)每秒10次,這種APP客戶(hù)端可以應用在更多的聯(lián)通終端上,每個(gè)聯(lián)通終端都提供一個(gè)不同的IP地址,這樣原理上目標服務(wù)器未能完全封殺聯(lián)通終端的IP地址。
圖1是本施行例的基于A(yíng)PP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求。爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,會(huì )向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列。判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端,Request懇求參數包含的必要參數:URL、Method、Headers、Form表單等。APP客戶(hù)端解析Request特定參數(根據后端前端約定好的特定參數判定是否須要繼續爬取數據),如須要就向目標服務(wù)器發(fā)起懇求獲取Response。通過(guò)模仿人的行為訪(fǎng)問(wèn)目標服務(wù)器來(lái)避免反爬蟲(chóng)機制的IP限制,如果不需要繼續爬取則停止懇求目標服務(wù)器之后回到初始狀態(tài)等待爬蟲(chóng)服務(wù)器重新配置爬取任務(wù)。APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,成功響應后并攜帶目標服務(wù)器返回的Response實(shí)時(shí)上傳到文件服務(wù)器,爬蟲(chóng)服務(wù)器校驗Response并更改隊列狀態(tài),繼續判定是否生成相應的懇求隊列。同時(shí)解析服務(wù)器按照解析規則(爬取數據不同須要配置不同的解析規則,將解析規則存在MySQL數據中,項目啟動(dòng)后緩存在Redis數據庫中,Redis數據庫為非關(guān)系型數據庫,效率很高,為爬蟲(chóng)系統做擴充打算。)定時(shí)解析文件服務(wù)器中封裝的Response文件。并將解析后的符合解析規則與用戶(hù)相關(guān)的數組數據存儲在MySQL數據庫中,解析服務(wù)器解析Response并更改解析狀態(tài)。
圖2是本施行例的基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的系統結構圖,集成爬蟲(chóng)sdk的APP安裝在不同的移動(dòng)端上就構成了本爬蟲(chóng)系統的一部分。與傳統的分布式爬蟲(chóng)系統服務(wù)器端相比,本發(fā)明的服務(wù)器子系統毋須為爬蟲(chóng)提供其運行所需的運算(CPU)資源和IP資源,本發(fā)明的爬蟲(chóng)占用的這兩種資源都取自聯(lián)通客戶(hù)端,且與基于瀏覽器的爬蟲(chóng)系統相比,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需按照不同的爬取任務(wù)多次下載爬蟲(chóng)任務(wù)腳本,節省流量,有效防止被殺毒軟件誤傷的風(fēng)險;實(shí)時(shí)將爬蟲(chóng)客戶(hù)端從目標服務(wù)器上得到的Response數據上傳到文件服務(wù)器中,定時(shí)由應用服務(wù)器解析后并持久保存到數據庫中這樣可避免基于瀏覽器的爬蟲(chóng)腳本因嚴禁瀏覽器緩存而未能完整地保存目標服務(wù)器返回的數據的問(wèn)題。 查看全部

本發(fā)明涉及網(wǎng)路爬蟲(chóng)領(lǐng)域,具體涉及基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取技巧。
背景技術(shù):
現有的爬蟲(chóng)技術(shù)獲取目標服務(wù)器數據的方法為通過(guò)HTTP庫向第三方服務(wù)器發(fā)起懇求,即發(fā)送一個(gè)Request,請求可以包含額外的headers等信息,等待第三方服務(wù)器響應,等待獲取第三方服務(wù)器響應內容:如果第三方服務(wù)器能正常響應,會(huì )得到一個(gè)Response,Response的內容便是所要獲取的頁(yè)面內容,類(lèi)型可能有HTML,JSON字符串,二進(jìn)制數據(如圖片視頻)等類(lèi)型,這種方式的缺點(diǎn)是由爬蟲(chóng)服務(wù)器直接懇求第三方服務(wù)器,容易導致爬蟲(chóng)服務(wù)器的負載過(guò)大,一旦第三方服務(wù)器有反爬蟲(chóng)機制如:檢查IP訪(fǎng)問(wèn)情況,一個(gè)IP假如短時(shí)間內超過(guò)了指定的次數都會(huì )被限制訪(fǎng)問(wèn)或嚴重情況下封殺網(wǎng)路IP導致難以訪(fǎng)問(wèn)。因此對于服務(wù)器的維護和更新形成了極大的困難。而且這些方式有一明顯缺點(diǎn)就是難以應用在現有流行的個(gè)人電子產(chǎn)品上,如手機、個(gè)人平板筆記本等聯(lián)通終端,只能在服務(wù)器上使用,應用范圍單一早已不是太符合現有多電子設備的社會(huì )。
技術(shù)實(shí)現要素:
鑒于背景技術(shù)的不足,本發(fā)明是基于A(yíng)PP客戶(hù)端的爬蟲(chóng)及爬取方式,所要解決的技術(shù)問(wèn)題是傳統的爬蟲(chóng)服務(wù)器直接訪(fǎng)問(wèn)目標服務(wù)器形式中,爬蟲(chóng)服務(wù)器多樣化程度高,可移植性差、維護和更新太困難,且頻繁爬取數據并上傳到爬蟲(chóng)服務(wù)器容易被具有反爬蟲(chóng)的目標服務(wù)器永久封鎖IP,也對爬蟲(chóng)服務(wù)器引起很大壓力,且基于瀏覽器的爬蟲(chóng)腳本對于用戶(hù)來(lái)說(shuō)并不友好,每次執行新的爬蟲(chóng)任務(wù)時(shí)須要重新下載爬蟲(chóng)腳本,會(huì )被殺毒軟件刺死。
為實(shí)現上述技術(shù)目的,本發(fā)明提供了如下技術(shù)方案:
基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據并實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器,然后由爬蟲(chóng)服務(wù)器解析采集的目標服務(wù)器數據。
爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據。
基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的爬取方式,其特點(diǎn)在于包括如下步驟:
S1:APP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求;
S2:所述爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,并向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列;
S3:判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列按次序拼接,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端;
S4:APP客戶(hù)端解析Request特定參數并判定是否須要繼續爬取數據,如須要就向目標服務(wù)器發(fā)起懇求獲取Response;不需要則停止互聯(lián)網(wǎng)爬蟲(chóng)回到步驟S1重新配置爬取任務(wù);
S5:APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,并成功響應后并攜帶目標服務(wù)器返回的Response,APP客戶(hù)端實(shí)時(shí)向文件服務(wù)器上傳Response,應用服務(wù)器按照解析規則定時(shí)解析文件服務(wù)器中的Response文件,并將解析后的數據保存到應用服務(wù)器的數據庫中;
S6:爬蟲(chóng)服務(wù)器解析Response并更改隊列狀態(tài),繼續執行第S2步。
步驟S4中所述Response的狀態(tài)碼為403時(shí),或是爬蟲(chóng)服務(wù)器校準Response不符合校準規則,則舍棄這次爬蟲(chóng)懇求。
步驟S5中的所述數據庫包含關(guān)系型數據庫和面向文檔的非關(guān)系型數據庫,與用戶(hù)狀態(tài)相關(guān)且之后會(huì )發(fā)生變化的數組保存在關(guān)系型數據庫中,不與狀態(tài)相關(guān)多用于查詢(xún)的數據通過(guò)構建索引存于非關(guān)系數據庫中。
本發(fā)明與現有技術(shù)相比所具有的有益療效是:將爬蟲(chóng)從傳統的服務(wù)端轉移到移動(dòng)端上,爬蟲(chóng)程序嵌套在A(yíng)PP客戶(hù)端里,本發(fā)明采用APP內嵌入爬蟲(chóng)sdk交互代碼形式,安裝了該APP的移動(dòng)端可作為一個(gè)子節點(diǎn)控制爬蟲(chóng)的啟動(dòng),服務(wù)器端持續監控協(xié)調各個(gè)爬蟲(chóng)的工作,及時(shí)接收爬蟲(chóng)回傳的有用信息,通過(guò)構建和維護數據庫對接收到的回傳信息進(jìn)行儲存。本APP客戶(hù)端爬蟲(chóng)顯著(zhù)減少服務(wù)器端的運算負荷app爬蟲(chóng)軟件,且所有安裝APP的移動(dòng)端都有不同的IP地址,爬蟲(chóng)服務(wù)器借助移動(dòng)端的IP地址抓取目標服務(wù)器的數據,在目標服務(wù)器有反爬蟲(chóng)機制時(shí),這種由APP客戶(hù)端和目標服務(wù)器交互的形式更象是人類(lèi)在操作(網(wǎng)絡(luò )懇求行為本身就是人類(lèi)操作電子設備發(fā)起懇求獲取資源展示給人類(lèi)觀(guān)看)。因為這些懇求方法本身就是由用戶(hù)的電子設備發(fā)起的網(wǎng)路懇求在獲取資源有效地解決了IP被封的問(wèn)題;采用客戶(hù)機/和服務(wù)器(c/s)模式,更具有擴展性和可移植性,相對于采用瀏覽器端和服務(wù)端(b/s)模式而言,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需多次下載任務(wù)腳本,有效防止被殺毒軟件誤傷的風(fēng)險。
附圖說(shuō)明
本發(fā)明有如下附圖:
圖1為本發(fā)明的爬蟲(chóng)工作流程圖;
圖2為本發(fā)明的爬蟲(chóng)系統結構圖。
具體施行方法
本施行例中的基于A(yíng)PP客戶(hù)端的爬蟲(chóng),包括與爬蟲(chóng)服務(wù)器匹配的爬蟲(chóng)sdk,爬蟲(chóng)sdk集成在A(yíng)PP客戶(hù)端中,該爬蟲(chóng)sdk可移植能力強,不依賴(lài)瀏覽器。APP客戶(hù)端通過(guò)與爬蟲(chóng)服務(wù)器端約定的特定參數來(lái)控制爬蟲(chóng)程序的啟停,APP客戶(hù)端作為子節點(diǎn)控制啟動(dòng)爬蟲(chóng)程序采集目標服務(wù)器數據實(shí)時(shí)退還給爬蟲(chóng)服務(wù)器app爬蟲(chóng)軟件,爬蟲(chóng)服務(wù)器包括文件服務(wù)器、應用服務(wù)器和解析服務(wù)器,爬蟲(chóng)服務(wù)器將爬取的數據以文件形式儲存在所述文件服務(wù)器中,由解析服務(wù)器定時(shí)解析從目標服務(wù)器采集來(lái)的數據,且訪(fǎng)問(wèn)頻度不超過(guò)目標服務(wù)器限制的訪(fǎng)問(wèn)頻度上限,一般不超過(guò)每秒10次,這種APP客戶(hù)端可以應用在更多的聯(lián)通終端上,每個(gè)聯(lián)通終端都提供一個(gè)不同的IP地址,這樣原理上目標服務(wù)器未能完全封殺聯(lián)通終端的IP地址。
圖1是本施行例的基于A(yíng)PP客戶(hù)端配置初始化完畢后向爬蟲(chóng)服務(wù)器發(fā)起啟動(dòng)互聯(lián)網(wǎng)爬蟲(chóng)懇求。爬蟲(chóng)服務(wù)器收到啟動(dòng)懇求,會(huì )向APP客戶(hù)端發(fā)送爬取規則及目標服務(wù)器的地址并判定是否生成相應的懇求隊列。判斷每位懇求的頁(yè)面是否須要信令,如須要先通過(guò)用戶(hù)協(xié)助訪(fǎng)問(wèn)頁(yè)面,爬蟲(chóng)服務(wù)器按照懇求隊列,封裝目標服務(wù)器的Request懇求返回給APP客戶(hù)端,Request懇求參數包含的必要參數:URL、Method、Headers、Form表單等。APP客戶(hù)端解析Request特定參數(根據后端前端約定好的特定參數判定是否須要繼續爬取數據),如須要就向目標服務(wù)器發(fā)起懇求獲取Response。通過(guò)模仿人的行為訪(fǎng)問(wèn)目標服務(wù)器來(lái)避免反爬蟲(chóng)機制的IP限制,如果不需要繼續爬取則停止懇求目標服務(wù)器之后回到初始狀態(tài)等待爬蟲(chóng)服務(wù)器重新配置爬取任務(wù)。APP客戶(hù)端懇求爬蟲(chóng)服務(wù)器,成功響應后并攜帶目標服務(wù)器返回的Response實(shí)時(shí)上傳到文件服務(wù)器,爬蟲(chóng)服務(wù)器校驗Response并更改隊列狀態(tài),繼續判定是否生成相應的懇求隊列。同時(shí)解析服務(wù)器按照解析規則(爬取數據不同須要配置不同的解析規則,將解析規則存在MySQL數據中,項目啟動(dòng)后緩存在Redis數據庫中,Redis數據庫為非關(guān)系型數據庫,效率很高,為爬蟲(chóng)系統做擴充打算。)定時(shí)解析文件服務(wù)器中封裝的Response文件。并將解析后的符合解析規則與用戶(hù)相關(guān)的數組數據存儲在MySQL數據庫中,解析服務(wù)器解析Response并更改解析狀態(tài)。
圖2是本施行例的基于A(yíng)PP客戶(hù)端的爬蟲(chóng)的系統結構圖,集成爬蟲(chóng)sdk的APP安裝在不同的移動(dòng)端上就構成了本爬蟲(chóng)系統的一部分。與傳統的分布式爬蟲(chóng)系統服務(wù)器端相比,本發(fā)明的服務(wù)器子系統毋須為爬蟲(chóng)提供其運行所需的運算(CPU)資源和IP資源,本發(fā)明的爬蟲(chóng)占用的這兩種資源都取自聯(lián)通客戶(hù)端,且與基于瀏覽器的爬蟲(chóng)系統相比,基于A(yíng)PP客戶(hù)端的爬蟲(chóng)無(wú)需按照不同的爬取任務(wù)多次下載爬蟲(chóng)任務(wù)腳本,節省流量,有效防止被殺毒軟件誤傷的風(fēng)險;實(shí)時(shí)將爬蟲(chóng)客戶(hù)端從目標服務(wù)器上得到的Response數據上傳到文件服務(wù)器中,定時(shí)由應用服務(wù)器解析后并持久保存到數據庫中這樣可避免基于瀏覽器的爬蟲(chóng)腳本因嚴禁瀏覽器緩存而未能完整地保存目標服務(wù)器返回的數據的問(wèn)題。