999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于BeautifulSoup+requests和selenium爬蟲網(wǎng)頁(yè)自動(dòng)化處理的實(shí)現(xiàn)和性能對(duì)比

2021-02-28 07:30:09李晨昊
現(xiàn)代信息科技 2021年16期
關(guān)鍵詞:頁(yè)面方法系統(tǒng)

摘? 要:網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)頁(yè)信息的程序或者腳本,因此編寫特定的網(wǎng)絡(luò)爬蟲可以用來(lái)對(duì)網(wǎng)頁(yè)進(jìn)行自動(dòng)化處理,從而達(dá)到提升工作效率的目的。文章針對(duì)同一個(gè)任務(wù)清單系統(tǒng),分別使用BeautifulSoup + requests和selenium兩種不同的爬蟲方法實(shí)現(xiàn)了網(wǎng)頁(yè)自動(dòng)化處理功能。并且通過(guò)對(duì)兩種方法的實(shí)現(xiàn)原理和運(yùn)行結(jié)果進(jìn)行分析,對(duì)兩種爬蟲方法進(jìn)行對(duì)比。

關(guān)鍵詞:爬蟲;網(wǎng)頁(yè)自動(dòng)化;BeautifulSoup+requests;selenium

中圖分類號(hào):TP391? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2021)16-0010-04

Implementation and Performance Comparison of Crawler Web Page Automatic Processing Based on BeautifulSoup + requests and selenium

LI Chenhao

(Wuhan Branch of China Mobile Hubei Co., Ltd., Wuhan? 430000, China)

Abstract: Web crawler is a program or script that automatically grabs web page information according to certain rules. Therefore, a specific web crawler can be written to process web pages automatically, which provides efficiency improvement. The paper uses two different crawler methods: BeautifulSoup + requests and selenium to implement webpage automatic processing function for the same task list system. By analyzing the implementation principle and operation results of the two methods, the two crawler methods are compared.

Keywords: crawler; webpage automation; BeautifulSoup+requests; selenium

0? 引? 言

網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)頁(yè)信息的程序或者腳本。它的基本工作方式是模擬人工的操作去訪問(wèn)網(wǎng)站,并且在網(wǎng)站查找數(shù)據(jù)或者發(fā)送數(shù)據(jù)。因此爬蟲不但能夠用來(lái)快速獲取網(wǎng)頁(yè)信息,而且能夠?qū)W(wǎng)頁(yè)進(jìn)行自動(dòng)化處理。

在實(shí)際工作中,碰到了一類任務(wù)清單系統(tǒng),需要對(duì)系統(tǒng)里的任務(wù)進(jìn)行處理。處理這些任務(wù)的操作大同小異,平均處理一條任務(wù)大約需要30秒到1分鐘。如果全程依靠人工來(lái)完成,不但耗費(fèi)時(shí)間長(zhǎng),而且還存在著人為誤差。因此,為了加快任務(wù)處理速度、提高任務(wù)處理準(zhǔn)確率、提升工作效率,編寫了python爬蟲腳本來(lái)對(duì)這些任務(wù)進(jìn)行自動(dòng)化處理。

最初版本的爬蟲是基于BeautifulSoup + requests庫(kù)的方法設(shè)計(jì)實(shí)現(xiàn)的,并且達(dá)到了預(yù)期的效果。后期由于新系統(tǒng)使用了遠(yuǎn)程訪問(wèn)模式,網(wǎng)址發(fā)生了變更,使得無(wú)法用原有方法進(jìn)行自動(dòng)化處理。因此重新編寫了一個(gè)新的基于selenium實(shí)現(xiàn)的爬蟲。兩種爬蟲方式雖然最終的都能達(dá)到相同的運(yùn)行效果,但是實(shí)現(xiàn)和性能上存在著不小的差異。

1? 基于BeautifulSoup + Requests的網(wǎng)頁(yè)自動(dòng)化腳本的設(shè)計(jì)與實(shí)現(xiàn)

1.1? 設(shè)計(jì)原理和思路

BeautifulSoup能夠從html/xml中通過(guò)標(biāo)簽很方便地提取數(shù)據(jù)[1]。Requests能夠向目標(biāo)網(wǎng)址發(fā)送http請(qǐng)求[2]。通過(guò)使用BeautifulSoup + requests的模式:先分析網(wǎng)頁(yè)源碼,再提取目標(biāo)網(wǎng)址,并發(fā)送http請(qǐng)求進(jìn)行數(shù)據(jù)傳輸,就能夠?qū)崿F(xiàn)網(wǎng)頁(yè)自動(dòng)化處理的功能。

1.2? 實(shí)現(xiàn)過(guò)程

1.2.1? 基本流程圖

該實(shí)現(xiàn)方法如圖1所示,首先使用requests包模擬用戶登錄,并用BeautifulSoup獲取頁(yè)面源碼。再使用循環(huán)對(duì)所有任務(wù)進(jìn)行遍歷,判斷當(dāng)前任務(wù)是否需要自動(dòng)處理。當(dāng)任務(wù)需要自動(dòng)處理的時(shí)候,使用requests跳轉(zhuǎn)到任務(wù)頁(yè)面鏈接,用BeautifulSoup獲取頁(yè)面源碼,再用requests的post方法模擬任務(wù)提交。

1.2.2? 模擬登錄

原系統(tǒng)登錄頁(yè)面采用的是“用戶名+密碼”的驗(yàn)證模式,驗(yàn)證通過(guò)后直接跳轉(zhuǎn)到系統(tǒng)內(nèi)部頁(yè)面。通過(guò)對(duì)系統(tǒng)登錄時(shí)發(fā)送的http請(qǐng)求進(jìn)行分析,發(fā)現(xiàn)當(dāng)前用戶的用戶名和密碼每次都以相同的密文保存在Request Headers的Cookie屬性中,并直接使用get方法發(fā)送。因此可以將此cookie作為固定值,傳入到get請(qǐng)求的header參數(shù)中,這樣就能夠模擬用戶進(jìn)行登錄。

1.2.3? 遍歷任務(wù)清單

通過(guò)分析網(wǎng)頁(yè)源碼,可以獲取任務(wù)清單的頁(yè)數(shù),而根據(jù)頁(yè)數(shù)就能夠構(gòu)造任務(wù)清單每一頁(yè)的URL。當(dāng)前頁(yè)中的每一條任務(wù)也都有一個(gè)鏈接。因此可以通過(guò)構(gòu)造每一頁(yè)的URL,先對(duì)頁(yè)進(jìn)行遍歷;再對(duì)每一頁(yè)中的任務(wù)進(jìn)行遍歷,達(dá)到對(duì)整個(gè)任務(wù)清單中的任務(wù)進(jìn)行遍歷的效果。

1.2.4? 模擬任務(wù)提交

經(jīng)過(guò)對(duì)任務(wù)頁(yè)面的源碼分析測(cè)試,發(fā)現(xiàn)頁(yè)面中填寫的所有信息都以json形式保存在form data表單中,并通過(guò)post方法提交給系統(tǒng)。因此可以根據(jù)實(shí)際要求制定邏輯,構(gòu)造一個(gè)提交表單form data,傳入到post請(qǐng)求的data參數(shù)中。這樣就能夠模擬用戶進(jìn)行任務(wù)提交。

1.3? 運(yùn)行結(jié)果

腳本中運(yùn)行后會(huì)顯示每次運(yùn)行處理的任務(wù)數(shù)量和總處理時(shí)間。其中處理任務(wù)較多的2次運(yùn)行結(jié)果如表1所示。

可以看出,平均每條任務(wù)處理時(shí)間在5~6秒。而人工處理一條任務(wù)所需要的時(shí)間大約在30秒,因此可以該腳本達(dá)到了提高工作效率的目的。

2? 基于selenium的網(wǎng)頁(yè)自動(dòng)化腳本的設(shè)計(jì)與實(shí)現(xiàn)

2.1? 設(shè)計(jì)原理思路

Selenium是一種基于瀏覽器驅(qū)動(dòng)的爬蟲方式,能夠直接識(shí)別動(dòng)態(tài)頁(yè)面加載后的網(wǎng)頁(yè)[3-5]。Selenium可以通過(guò)對(duì)瀏覽器調(diào)試,模擬鼠標(biāo)點(diǎn)擊等、鍵盤輸入等操作,讓瀏覽器產(chǎn)生響應(yīng)。因此可使用將人工操作步驟直接使用selenium進(jìn)行模擬,從而達(dá)到自動(dòng)化處理的功能。

2.2? 設(shè)計(jì)過(guò)程

2.2.1? 基本流程圖

該實(shí)現(xiàn)方法如圖2所示,首先手動(dòng)登錄外部系統(tǒng),再使用selenium模擬瀏覽器登錄內(nèi)部系統(tǒng);登錄之后遍歷所有任務(wù),判斷當(dāng)前任務(wù)是否需要自動(dòng)處理。當(dāng)任務(wù)需要自動(dòng)處理的時(shí)候,使用selenium對(duì)任務(wù)頁(yè)面中各個(gè)元素進(jìn)行定位和填寫。

2.2.2? 模擬登錄

新系統(tǒng)需要從一個(gè)外部系統(tǒng)跳轉(zhuǎn)之后進(jìn)入,不能直接登錄。跳轉(zhuǎn)后的URL有一個(gè)ticket參數(shù),這個(gè)參數(shù)每次跳轉(zhuǎn)都會(huì)發(fā)生變化,因此也無(wú)法獲取準(zhǔn)確的登陸頁(yè)面URL。外部管控系統(tǒng)采用的是“用戶名+密碼+滑動(dòng)驗(yàn)證碼+短信驗(yàn)證碼”的驗(yàn)證模式;新系統(tǒng)采用的是“用戶名+密碼+圖形驗(yàn)證碼”的驗(yàn)證模式。

這種登錄模式下,由于有滑動(dòng)驗(yàn)證碼和短信驗(yàn)證碼的存在,如果還使用BeautifulSoup + requests模式的話,是無(wú)法獲取到相關(guān)信息的。因此最后決定使用selenium,并采用“手動(dòng)準(zhǔn)備+自動(dòng)填寫+鍵盤輸入”的對(duì)模擬系統(tǒng)登錄,步驟為:

(1)用戶手動(dòng)進(jìn)行“用戶名+密碼+滑動(dòng)驗(yàn)證碼+短信驗(yàn)證碼”驗(yàn)證登錄外部系統(tǒng),跳轉(zhuǎn)到新系統(tǒng)登錄頁(yè)面,并將登錄頁(yè)URL保存到本地文件。

(2)使用selenium讀取本地文件中的URL,填入預(yù)設(shè)的用戶名和密碼。

(3)在命令行輸入鍵盤圖形驗(yàn)證碼。

(4)模擬登錄。

2.2.3? 遍歷任務(wù)清單

Selenium遍歷的任務(wù)清單的方法比較直接。模擬鼠標(biāo)點(diǎn)擊最后一頁(yè),然后不斷點(diǎn)擊“上一頁(yè)”,直到訪問(wèn)到第1頁(yè)。在每一頁(yè)中,也都能夠通過(guò)分析網(wǎng)頁(yè)源碼,定位到任務(wù)鏈接所在的元素,模擬鼠標(biāo)點(diǎn)擊,來(lái)進(jìn)入到具體的任務(wù)。

2.2.4? 模擬任務(wù)提交

Selenium模擬任務(wù)提交的方法也很直接。直接從源碼中定位到對(duì)應(yīng)元素,根據(jù)元素類型不同調(diào)用不同方法進(jìn)行填寫。如果是下拉框就調(diào)用click方法選中下拉元素,如果是輸入框就通過(guò)send_key方法進(jìn)行文本填寫。填寫完成后再定位到提交按鈕調(diào)用click方法模擬鼠標(biāo)點(diǎn)擊,就能夠模擬任務(wù)提交。

2.3? 運(yùn)行結(jié)果

腳本中運(yùn)行后會(huì)顯示每次運(yùn)行處理的任務(wù)數(shù)量和總處理時(shí)間。挑選其中5次處理任務(wù)數(shù)不同的運(yùn)行結(jié)果如表2所示。

可以看出,平均每條任務(wù)的處理時(shí)間在10~20秒,相對(duì)前面一種方法的運(yùn)行速度較慢,但是仍然比人工操作的速度要快。

3? 兩種自動(dòng)化腳本特性分析

3.1? BeautifulSoup+requests自動(dòng)化腳本特點(diǎn)

3.1.1? 非可視化

BeautifulSoup + requests腳本本質(zhì)上是通過(guò)構(gòu)造HTTP請(qǐng)求方法來(lái)模擬網(wǎng)頁(yè)訪問(wèn)的,獲取到的網(wǎng)頁(yè)源碼只是以變量形式存在于腳本中,對(duì)用戶來(lái)說(shuō)是“看不見”的,整個(gè)過(guò)程沒(méi)有可視化界面出現(xiàn)。

3.1.2? 無(wú)法獲取動(dòng)態(tài)網(wǎng)頁(yè)源碼

在使用BeautifulSoup + requests調(diào)試期間發(fā)現(xiàn),使用requests訪問(wèn)任務(wù)清單系統(tǒng)主頁(yè)URL時(shí),獲取到的網(wǎng)頁(yè)源碼中只有標(biāo)題和用戶信息,并沒(méi)有其他網(wǎng)頁(yè)元素。這是因?yàn)锽eautifulSoup + requests只能獲取靜態(tài)網(wǎng)頁(yè)的代碼,而無(wú)法獲取通過(guò)動(dòng)態(tài)加載才能出現(xiàn)的網(wǎng)頁(yè)源碼。因此在代碼編寫中,必須要跳過(guò)動(dòng)態(tài)生成的頁(yè)面,直接定位到目標(biāo)信息出現(xiàn)的頁(yè)面,而這個(gè)頁(yè)面往往不會(huì)是主頁(yè),因此這也是這種實(shí)現(xiàn)方式的難點(diǎn)。

3.1.3? 構(gòu)造數(shù)據(jù)包

構(gòu)造數(shù)據(jù)包分為兩種,一個(gè)是構(gòu)造header包,一個(gè)是構(gòu)造form表單。header包是用來(lái)模擬瀏覽器和傳遞cookie值的;form表單是用來(lái)將提交給目標(biāo)網(wǎng)頁(yè)用作下一步操作的。這兩種數(shù)據(jù)包都需要在編寫代碼時(shí)手動(dòng)進(jìn)行構(gòu)造,只有當(dāng)這兩種數(shù)據(jù)包構(gòu)造正確時(shí),才會(huì)生成正確的HTTP請(qǐng)求。因此正確地構(gòu)造header和form表單是這中實(shí)現(xiàn)方式成功的關(guān)鍵。

3.1.4? 難以使用鍵盤輸入輔助

通過(guò)觀察HTTP包發(fā)現(xiàn),數(shù)據(jù)包中傳輸?shù)哪承┳侄问鞘褂玫拿芪摹@缭谀M用戶登錄時(shí),在HTTP包中傳輸?shù)膶?duì)應(yīng)字段并不是登陸所使用的用戶名和密碼的原始字符串,而是經(jīng)過(guò)加密的字符串,并且而這種加密方式不能夠確定。這種特性導(dǎo)致了這種實(shí)現(xiàn)方式很難利用鍵盤輸入信息進(jìn)行輔助。

3.2? Selenium自動(dòng)化腳本特性

3.2.1? 驅(qū)動(dòng)程序依賴

Selenium是需要對(duì)瀏覽器進(jìn)行調(diào)試的,因此需要另行下載當(dāng)前瀏覽器當(dāng)前版本的驅(qū)動(dòng)程序,并且不同瀏覽器所需要的驅(qū)動(dòng)程序也不一樣。

3.2.2? 可視化

Selenium啟動(dòng)時(shí)會(huì)運(yùn)行打開一個(gè)瀏覽器,并且整個(gè)頁(yè)面的操作都是可視化的。能夠清楚的看到網(wǎng)頁(yè)上的元素變化,包括按鍵點(diǎn)擊、文本填寫、頁(yè)面跳轉(zhuǎn)等。

3.2.3? 可獲取動(dòng)態(tài)網(wǎng)頁(yè)

Selenium最終獲取的是網(wǎng)頁(yè)加載完畢時(shí)候的源碼,因此動(dòng)態(tài)加載對(duì)selenium沒(méi)有任何影響。

3.2.4? 模擬操作事件

基于Selenium的自動(dòng)化基本可以分為兩步:首先要定位到網(wǎng)頁(yè)上的某一個(gè)元素;然后再模擬這一元素上發(fā)生的事件(例如鼠標(biāo)點(diǎn)擊和文本填寫)。因此準(zhǔn)確地定位到對(duì)的網(wǎng)頁(yè)元素是這種實(shí)現(xiàn)方式成功的關(guān)鍵。

3.2.5? 等待加載

使用selenium調(diào)試時(shí),經(jīng)常會(huì)出現(xiàn)這種狀況:由于瀏覽器UI的加載速度遠(yuǎn)遠(yuǎn)慢于代碼的執(zhí)行速度,當(dāng)某條代碼讓網(wǎng)頁(yè)加載新元素時(shí),下一條代碼需要讀取新元素的信息;然而當(dāng)代碼運(yùn)行到下一句的時(shí)候,目標(biāo)新元素并沒(méi)有及時(shí)加載出來(lái),使得后一句的代碼實(shí)際上讀取了一個(gè)不存在的元素,從而導(dǎo)致報(bào)錯(cuò)。

為了避免這種情況的出現(xiàn),腳本在各種操作之間加上了被動(dòng)的等待語(yǔ)句,使得腳本能夠在瀏覽器完成加載之后再進(jìn)行讀取。

3.2.6? 可以使用鍵盤輸入輔助

因?yàn)閟elenium是在瀏覽器中模擬各種操作的,因此可以使用鍵盤輸入信息進(jìn)行輔助。2.2.2中模擬登錄就是采用了鍵盤輔助的方式進(jìn)行的。

3.3? 兩種實(shí)現(xiàn)方式對(duì)比

以上兩種實(shí)現(xiàn)方式都能夠達(dá)到讓網(wǎng)頁(yè)自動(dòng)化處理的效果,但是可以看出兩者在實(shí)現(xiàn)機(jī)制、關(guān)鍵步驟、執(zhí)行速度上有著明顯的區(qū)別。

從表3中可以看出,BeautifulSoup + requests自動(dòng)化腳本運(yùn)行速度快,但是實(shí)現(xiàn)難度較大,適用于登錄驗(yàn)證簡(jiǎn)單,并且容易獲得靜態(tài)頁(yè)面的網(wǎng)頁(yè)。Selenium實(shí)現(xiàn)方式因?yàn)橛袨g覽器的可視化運(yùn)行,以及被動(dòng)等待操作,運(yùn)行速度相對(duì)較慢(仍快于人工操作);但是實(shí)現(xiàn)方式較為簡(jiǎn)單,相對(duì)適用于登陸驗(yàn)證復(fù)雜,需要獲取動(dòng)態(tài)加載內(nèi)容的網(wǎng)頁(yè)。

4? 結(jié)? 論

本文分別使用BeautifulSoup + requests和selenium兩種爬蟲方法對(duì)不同登陸驗(yàn)證模式下的同一個(gè)任務(wù)系統(tǒng)進(jìn)行自動(dòng)化處理功能實(shí)現(xiàn),并且通過(guò)對(duì)兩種自動(dòng)化實(shí)現(xiàn)方式的特性分析進(jìn)行比較,總結(jié)了兩種爬蟲方法的使用場(chǎng)景。下一步期望能夠?qū)煞N爬蟲方法混合,既具有BeautifulSoup + requests的快速運(yùn)行特性,也具有selenium的模擬復(fù)雜登陸特性。

參考文獻(xiàn):

[1] 歐陽(yáng)元東.基于Python的網(wǎng)站數(shù)據(jù)爬取與分析的技術(shù)實(shí)現(xiàn)策略 [J].電腦知識(shí)與技術(shù),2020,16(13):262-263.

[2] 王鑫.基于Python的微信公眾平臺(tái)數(shù)據(jù)爬蟲 [J].福建質(zhì)量管理,2019(17):270-271.

[3] 高艷.基于Selenium框架的大數(shù)據(jù)崗位數(shù)據(jù)爬取與分析 [J].工業(yè)控制計(jì)算機(jī),2020,33(2):109-111.

[4] 劉軍.基于Selenium的網(wǎng)頁(yè)自動(dòng)化測(cè)試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) [D].武漢:華中科技大學(xué),2014.

[5] 沈承放,莫達(dá)隆.beautifulsoup庫(kù)在網(wǎng)絡(luò)爬蟲中的使用技巧及應(yīng)用 [J].電腦知識(shí)與技術(shù),2019,15(28):13-16.

作者簡(jiǎn)介:李晨昊(1990.06—),男,漢族,湖北武漢人,中級(jí)通信工程師,碩士研究生,研究方向:計(jì)算機(jī)。

猜你喜歡
頁(yè)面方法系統(tǒng)
大狗熊在睡覺
Smartflower POP 一體式光伏系統(tǒng)
刷新生活的頁(yè)面
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
同一Word文檔 縱橫頁(yè)面并存
主站蜘蛛池模板: 久久中文字幕不卡一二区| 欧美精品成人| 国产成人1024精品| 伊伊人成亚洲综合人网7777| 在线免费观看AV| 亚洲国产在一区二区三区| 国产中文一区二区苍井空| 99视频在线免费看| 亚洲大学生视频在线播放| 亚洲AV成人一区二区三区AV| 久久综合色天堂av| 国产高清又黄又嫩的免费视频网站| 国产日韩欧美视频| 中文字幕无码中文字幕有码在线| 漂亮人妻被中出中文字幕久久| 永久免费无码成人网站| 熟女日韩精品2区| 99在线小视频| 欧美日韩成人在线观看| 熟女成人国产精品视频| 久久大香香蕉国产免费网站| 亚洲中文字幕国产av| 色哟哟国产成人精品| 99久久精品国产麻豆婷婷| 欧美午夜小视频| 一个色综合久久| 国产精品专区第1页| 五月天香蕉视频国产亚| 国产主播福利在线观看| 国产二级毛片| 亚洲无线视频| 91无码视频在线观看| 成人伊人色一区二区三区| 国产成人高清精品免费软件| 成人中文在线| 国产精品流白浆在线观看| 亚洲精品成人片在线播放| 中文字幕无码制服中字| 超清无码一区二区三区| AV色爱天堂网| 99re经典视频在线| 亚洲伊人天堂| 亚洲爱婷婷色69堂| 久草视频中文| 奇米影视狠狠精品7777| 亚洲成人在线免费| www亚洲精品| 国产精品第一区在线观看| 亚洲国产天堂久久综合| 国产性猛交XXXX免费看| 久久香蕉国产线看观看亚洲片| 91精品国产麻豆国产自产在线| 亚洲成a人在线播放www| 中文字幕久久亚洲一区| 国产亚洲成AⅤ人片在线观看| 小13箩利洗澡无码视频免费网站| 九九九国产| 精品视频在线观看你懂的一区| 久久精品亚洲专区| 色综合热无码热国产| 亚洲欧美精品日韩欧美| 在线观看网站国产| 欧美亚洲欧美| 久久亚洲中文字幕精品一区 | 一级全黄毛片| 亚洲高清国产拍精品26u| 久久这里只精品热免费99| 亚洲第一香蕉视频| 激情亚洲天堂| 日韩av高清无码一区二区三区| 99热这里只有精品久久免费 | 亚洲第一成年网| 亚洲综合亚洲国产尤物| 亚洲91在线精品| 亚洲国产综合第一精品小说| 在线国产三级| 男女男免费视频网站国产| 狠狠色综合久久狠狠色综合| 国产高清在线丝袜精品一区| 88av在线| 最新日本中文字幕| 日本亚洲欧美在线|