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


編寫的代碼及步驟如下。

#運行結果,所爬取的圖片(部分)如圖1。

圖1 爬取的圖片
編寫的代碼及步驟如下。



圖2 運行過程
基于Python的爬蟲技術,是目前許多用戶所采用和所追求的一項技術,也是大部分學者比較喜歡的一種方法[9]。Python為用戶提供了許多爬蟲技術的庫,也提供了許多爬蟲技術的框架,既能夠規避反爬蟲技術,又能夠自動地、高效率地為用戶爬取需要的數據。基于Python的爬蟲技術,是一項可以繼續擴展和延伸的技術。