翟普


摘要:隨著網絡技術的迅猛發展,網絡已經成為信息的栽體,網絡隨處可見,打開網絡,大量的信息充斥而來。如何有效提取并利用網絡中有價值的信息將會成為未來一個很大的挑戰。網絡爬蟲是一個可以自動提取網頁的程序,Zh.;b-維網上下栽網頁,提取信息。通常爬取的頁面比較多,如何快速有效地爬取頁面是關鍵,該文通過當當網新書暢銷排行榜實例來分析對比現有的四種方式,得出結果異步爬蟲和scrapy框架爬蟲速度最快。
關鍵詞:網絡爬蟲;異步爬蟲;scrapy框架爬蟲
中圖分類號:TP393 文獻標識碼:A
文章編號:1009-3044(2020)01-0029-02
1什么是網絡爬蟲
搜索引擎,如baidu、google、yahoo、sougou等是人們通過網絡檢索信息的入口,但是這些搜索引擎存在著一定的局限性,它們大多是基于關鍵詞進行檢索,它們的目標是盡可能大地覆蓋到網絡,檢索出來的數據形式也多樣化,如:圖片、文字、音頻、視頻、數據庫等。但是,通常情況下不同背景的用戶檢索目的和需求有所差異,對搜索引擎返回的大量結果可能并不關心,對于一些信息含量密集并且具有一定結構的數據不能很好地發現和利用。而搜索引擎也會基于服務器資源有限,而網絡資源無限產生資源之間的矛盾。
為了解決這些問題,網絡爬蟲隨之而誕生。網絡爬蟲實質是一個程序,它可以自動地下載網頁,根據特定的需求,提取爬取網頁的某些內容和信息,可以選擇性地從網絡上抓取相關網頁和鏈接,為面向主題的用戶提供數據資源。
一個網絡蜘蛛就是一種機器人,通常,網絡爬蟲首先會爬取一組url,一個url對應一個頁面,然后對每一個頁面里面的url鏈接再進行反復爬取。爬蟲的基本流程為:
第一步:向要爬取的網頁服務器發出請求
通過request庫的get方法向目標站點服務器發出請求,等待目標服務器的響應;
第二步:獲得請求響應的內容
如果目標站點服務器能夠正常響應,就會返回一個Re-sponse對象,該對象包含請求網頁的內容;
第三步:解析網頁內容
第二步得到的頁面內容可能是HTML格式的,使用第三方頁面解析庫或者使用正則表達式進行解析;
第四步:處理網頁內容
處理解析出的網頁內容,提取重要的信息,進行保存或者格式化輸出。
2python與網絡爬蟲的聯系
2008年,自Android將移動操作系統開源以來,一批新的計算機技術和概念迅速涌現,這些技術促使現有的計算機技術升級換代。這些概念包括云計算、移動互聯網、互聯網+、大數據、可穿戴計算等。這些概念讓計算的平臺和應用變得更多樣化,同時不可避免也帶來了更復雜的安全問題。雖然概念很多,但是,在這個階段很難有哪個技術能夠獨領風騷,面對復雜的功能性和緊迫的迭代周期,計算機需要更抽象級別的程序設計語言來表達可編程性,python語言稱為這個階段的主流編程語言。
由于python擁有豐富的網絡抓取模塊,對字符的處理也很靈活,書寫爬蟲很方便,并且擁有強大的爬蟲框架scrapy,所以經常用python來寫爬蟲。今天我們通過研究幾種python爬蟲爬行策略,來分析每種策略的優劣。
3python網絡爬蟲的幾種方法一以當當網新書暢銷排行榜為例
通過施加不同的策略,可以將Python網絡爬蟲的方法大致分為四種:同步爬取方法、并發爬取方法、異步爬取方法、scrapy框架爬取方法。下面通過具體介紹每種方法,來對四種方法進行對比分析。
3.1同步爬取方法
3.1.1方法簡介
該爬蟲方法是用requests+BeautifulSoup的方法。Requests庫是使用python語言編寫的HTTP庫,BeautifulSoup庫是一個靈活又方便的網頁解析庫,處理高效,支持多種解析器。利用它就不用編寫正則表達式也能方便的實現網頁信息的抓取,BeautifulSoup可以解析網頁代碼,根據用戶的需求獲取想要的內容格式化輸出。
3.1.2運行結果
使用一般的同步方法,爬取25頁書籍,總共耗時大約為7.27s
3.2并發爬取方法
3.2.1方法簡介
該方法利用并發模塊concurrent.futures來實現,該模塊使用多線程來加速同步爬取的方法,該模塊支持線程池和進程池,可以根據實際情況設置線程個數,本文設置線程的個數為16個,因為線程設置越多,切換的開銷也會比較大。
關鍵代碼如下:
##利用并發模塊concurrent,futures爬取網頁
executor=ThreadPoolExecutor(max_workers=61)
##函數submit():parser為函數的名字,uds為傳入的參數,可以有多個參數
book_tasks=[executor.submit(parser,urls)for url in urls]
##表示等前面所有的線程全部執行完畢才會進行后面程序的執行
wait(book_tasks,return_when=ALL_COMPLETED)
3.2.2運行結果
使用并發方式,耗時大約為7.79s,說明使用多線程,并不一定會加快爬蟲的速度。
3.3異步爬取方法
3.3.1方法簡介
使用第三方庫aiohttp可以進行異步處理http的請求,使用第三方庫asyncio可以進行時間異步10,異步10方法可以很好地提升網絡爬蟲的速度。這種爬取方法與同步方法的思路和處理方法基本一致,只是在處理HTTP請求時使用了aiohttp模塊以及在解析網頁時函數變成了協程(coroutine),再利用aysncio進行并發處理,這樣無疑能夠提升爬蟲的效率。
3.3.2運行結果
3.4scrapy框架爬取方法
Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,只需要定制開發幾個模塊就可以輕松的實現一個爬蟲。具體步驟如下: