洪麗華 HONG Li-hua;黃瓊慧 HUANG Qiong-hui
(廈門軟件職業(yè)技術(shù)學(xué)院軟件工程學(xué)院,廈門 361000)
爬蟲技術(shù)是一把雙刃劍。隨著科學(xué)的發(fā)展,網(wǎng)絡(luò)的應(yīng)用也隨之快速地發(fā)展。網(wǎng)絡(luò)的最大作用是隨時(shí)隨地給不同的用戶提供資源。網(wǎng)絡(luò)提供了大量的資源,特別是隨著大數(shù)據(jù)技術(shù)的發(fā)展,用戶如何在這些資源中盡快找到自己所需要的呢?運(yùn)用爬蟲技術(shù),能夠以最快地速度獲取到用戶所需要的相關(guān)資源。爬蟲,像機(jī)器人一樣,按照制定的規(guī)則、編寫的程序,在網(wǎng)絡(luò)中能夠自動(dòng)地搜索、整理相關(guān)的資源。爬蟲技術(shù),也稱為網(wǎng)絡(luò)爬蟲[1]。運(yùn)用爬蟲技術(shù),既能獲取到網(wǎng)站上合法的、公開的的信息,也能獲取到不合法的、私人的信息。本人提倡在法律法規(guī)的范圍內(nèi)、在道德約束的條件下,運(yùn)用爬蟲技術(shù)。
爬蟲技術(shù)的應(yīng)用非常廣泛,比如:爬取網(wǎng)頁、爬取熱點(diǎn)新聞、爬取金融信息、爬取用戶的聯(lián)系方式等等[2]。其中,最廣泛、最流行的應(yīng)用是爬取網(wǎng)頁,即網(wǎng)頁爬蟲。實(shí)現(xiàn)爬蟲技術(shù),可以運(yùn)用編程語言來編寫程序代碼,比如:C語言、C++、Java、Python等程序設(shè)計(jì)的語言。其中,Python語言具有簡潔的代碼、開發(fā)的效率高等優(yōu)勢,頗受開發(fā)者的熱愛。
本文從Python、爬蟲技術(shù)和網(wǎng)頁爬蟲等三大方面進(jìn)行闡述。
Python提供的安裝程序、源代碼,都是免費(fèi)的。它分別提供了與操作系統(tǒng)Windows、Linux和Mac等其它操作系統(tǒng)相匹配的所有免費(fèi)的安裝版本,又分別提供了在線的、離線的和壓縮包的等安裝程序。比如,Python 3.11.Orc-Sept 12,2022版 本 提 供 了Windows installer(32-bit)、Windows installer(64-bit)、Windows installer(ARM64)和Windows embeddable package(32-bit)、Windows embeddable package(64-bit)、Windows embeddable package(ARM64)等安裝程序[3]。本文的程序代碼是在Windows操作系統(tǒng)下運(yùn)行的。Python的官方下載網(wǎng)址為:https://www.python.org/downloads。
Python不僅僅自帶強(qiáng)大、豐富的標(biāo)準(zhǔn)庫,還擁有大量的第三方庫[4]。Python的所有第三方庫的官方下載網(wǎng)址為:https://www.pypi.org。假設(shè)要下載第三方庫Scrapy,登錄第三方庫的官方網(wǎng)站,在搜索框中輸入Scrapy,就能搜索到它的所有版本,用戶再根據(jù)電腦的配置選擇相應(yīng)的版本下載、安裝。
在安裝第三方庫時(shí),可以選擇在線安裝,也可以選擇離線安裝。如果是在線安裝,比如安裝Scrapy,在命令符窗口輸入:pip install scrapy,系統(tǒng)會(huì)自動(dòng)選擇與電腦相匹配的scrapy版本進(jìn)行安裝;如果是離線安裝,用戶得先查看、判斷電腦里面的相關(guān)軟件的版本,再下載相應(yīng)的scrapy版本進(jìn)行安裝。
Python提供了許多庫來實(shí)現(xiàn)爬蟲技術(shù)[5],比如,BeautifulSoup庫、rurlib庫、requests庫和pycurl庫等等。其中,用得比較多的是requests庫,包含以下常用的函數(shù):request()、get()、head、post、put、patch、delete()等等。
爬蟲技術(shù)的一般流程是[5]:①明確需要爬取的目標(biāo)、內(nèi)容;爬取哪個(gè)網(wǎng)站的哪些內(nèi)容,每個(gè)網(wǎng)站的URL是不一樣的,需要正確地輸入,比如,百度的URL是:http://www.baidu.com;京東的URL是:http://www.jd.com;需要爬取哪些內(nèi)容,得正確地書寫;②用戶向服務(wù)器發(fā)送請(qǐng)求;一般需要加請(qǐng)求的報(bào)頭,比如加:“User-Agent”,以免被誤認(rèn)為是非法客戶的訪問;③服務(wù)器返回給用戶的數(shù)據(jù);服務(wù)器會(huì)給用戶發(fā)回許許多多的數(shù)據(jù),包含有價(jià)值的數(shù)據(jù)和無價(jià)值的數(shù)據(jù)等等;④解析、提取需要的數(shù)據(jù);從服務(wù)器返回的數(shù)據(jù)中,解析和提取有價(jià)值的數(shù)據(jù),過濾無價(jià)值的數(shù)據(jù);⑤用文件、數(shù)據(jù)庫或其它方式存儲(chǔ)相應(yīng)的數(shù)據(jù);把解析和提取的有價(jià)值數(shù)據(jù)用不同的形式保存以備用。
Python也提供了許多框架來實(shí)現(xiàn)爬蟲技術(shù)[6],比如,Portia、Crawley、Scrapy等等。其中Scrapy框架,包含下載器(Downloader)、Spider中間件(Spider Middlewares)、下載器中間件(Downloader Middlewares)等多個(gè)組件,同時(shí),Scrapy框架也包含了許多作用不同的相對(duì)應(yīng)的命令,比如,使用Scrapy下載器下載的URL并且將內(nèi)容輸出的fetch()命令。
但是,由于爬蟲的過程中,許多服務(wù)器資源會(huì)被消耗掉,服務(wù)器的穩(wěn)定性也會(huì)受到很大影響,基于種種原因,爬蟲是不受網(wǎng)站所有者的歡迎。為了能夠順利地實(shí)現(xiàn)爬蟲技術(shù),需要先了解網(wǎng)站所有者所制定的限制措施——反爬蟲,然后,再制定相應(yīng)的措施來規(guī)避反爬蟲。比如,可以通過訪問頻度的調(diào)整來規(guī)避反爬蟲[7],這種方法主要是針對(duì)有些網(wǎng)站設(shè)置的訪問頻度閾值,爬蟲時(shí)設(shè)置的閾值應(yīng)該恰當(dāng),可以比網(wǎng)站設(shè)置的訪問頻度閾值要略低,這樣爬取的穩(wěn)定性會(huì)比較好、爬取的效率也會(huì)比較高。還有其它規(guī)避反爬蟲的方法:代理IP、應(yīng)對(duì)網(wǎng)站結(jié)構(gòu)變化等等。
運(yùn)用爬蟲技術(shù)的一般流程,按照要求,運(yùn)用Python提供的相關(guān)庫的函數(shù),按照步驟完成。
相關(guān)的步驟及代碼如下。
編寫的代碼及步驟如下。
#運(yùn)行結(jié)果,所爬取的圖片(部分)如圖1。
圖1 爬取的圖片
編寫的代碼及步驟如下。
圖2 運(yùn)行過程
基于Python的爬蟲技術(shù),是目前許多用戶所采用和所追求的一項(xiàng)技術(shù),也是大部分學(xué)者比較喜歡的一種方法[9]。Python為用戶提供了許多爬蟲技術(shù)的庫,也提供了許多爬蟲技術(shù)的框架,既能夠規(guī)避反爬蟲技術(shù),又能夠自動(dòng)地、高效率地為用戶爬取需要的數(shù)據(jù)?;赑ython的爬蟲技術(shù),是一項(xiàng)可以繼續(xù)擴(kuò)展和延伸的技術(shù)。