網路爬蟲簡介!網路爬蟲簡介!
歡迎來到網路爬蟲的廣闊天地!網路爬蟲被用於許多領域,收集不太容易以其他格式獲取的資料。你可能是正在撰寫新報道的記者,也可能是正在抽取新資料集的資料科學家。即使你只是臨時的開發人員,網路爬蟲也是非常有用的工具,比如當你需要檢查大學網站上最新的家庭作業並且希望通過郵件傳送給你時。無論你的動機是什麼,我們都希望你已經準備好開始學習了!
進群:960410445 即可獲取數十套PDF!
在本章中,我們將介紹如下主題:
網路爬蟲領域簡介;
解釋合法性質疑;
介紹Python 3安裝;
對目標網站進行背景調研;
逐步完善一個高階網路爬蟲;
使用非標準庫協助抓取網站。
1.1網路爬蟲何時有用
假設我有一個鞋店,並且想要及時瞭解競爭對手的價格。我可以每天訪問他們的網站,與我店鋪中鞋子的價格進行對比。但是,如果我店鋪中的鞋類品種繁多,或是希望能夠更加頻繁地檢視價格變化的話,就需要花費大量的時間,甚至難以實現。再舉一個例子,我看中了一雙鞋,想等到它促銷時再購買。我可能需要每天訪問這家鞋店的網站來檢視這雙鞋是否降價,也許需要等待幾個月的時間,我才能如願盼到這雙鞋促銷。上述這兩個重複性的手工流程,都可以利用本書介紹的網路爬蟲技術實現自動化處理。在理想狀態下,網路爬蟲並不是必需品,每個網站都應該提供API,以結構化的格式共享它們的資料。然而在現實情況中,雖然一些網站已經提供了這種API,但是它們通常會限制可以抓取的資料,以及訪問這些資料的頻率。另外,網站開發人員可能會變更、移除或限制其後端API。總之,我們不能僅僅依賴於API去訪問我們所需的線上資料,而是應該學習一些網路爬蟲技術的相關知識。
1.2 網路爬蟲是否合法
儘管在過去20年間已經做出了諸多相關裁決,不過網路爬蟲及其使用時法律所允許的內容仍然處於建設當中。如果被抓取的資料用於個人用途,且在合理使用版權法的情況下,通常沒有問題。但是,如果這些資料會被重新發布,並且抓取行為的攻擊性過強導致網站宕機,或者其內容受版權保護,抓取行為違反了其服務條款的話,那麼則有一些法律判例可以提及。
在Feist Publications, Inc.起訴Rural Telephone Service Co.的案件中,美國聯邦最高法院裁定抓取並轉載真實資料(比如,電話清單)是允許的。在澳大利亞,Telstra Corporation Limited起訴Phone Directories Company Pty Ltd這一類似案件中,則裁定只有擁有明確作者的資料,才可以受到版權的保護。而在另一起發生於美國的美聯社起訴融文集團的內容抓取案件中,則裁定對美聯社新聞重新聚合為新產品的行為是侵犯版權的。此外,在歐盟的ofir.dk起訴home.dk一案中,最終裁定定期抓取和深度連結是允許的。
還有一些案件中,原告控告一些公司抓取強度過大,嘗試通過法律手段停止其抓取行為。在最近的QVC訴訟Resultly的案件中,最終裁定除非抓取行為造成了私人財產損失,否則不能被認定為故意侵害,即使爬蟲活動導致了部分站點的可用性問題。這些案件告訴我們,當抓取的資料是現實生活中真實的公共資料(比如,營業地址、電話清單)時,在遵守合理的使用規則的情況下是允許轉載的。但是,如果是原創資料(比如,意見和評論或使用者隱私資料),通常就會受到版權限制,而不能轉載。無論如何,當你抓取某個網站的資料時,請記住自己是該網站的訪客,應當約束自己的抓取行為,否則他們可能會封禁你的IP,甚至採取更進一步的法律行動。這就要求下載請求的速度需要限定在一個合理值之內,並且還需要設定一個專屬的使用者代理來標識自己的爬蟲。你還應該設法檢視網站的服務條款,確保你所獲取的資料不是私有或受版權保護的內容。如果你還有疑慮或問題,可以向媒體律師諮詢你所在地區的相關判例。你可以自行搜尋下述法律案件的更多資訊Feist Publications Inc.起訴Rural Telephone Service Co.的案件。
Telstra Corporation Limited起訴Phone Directories Company Pvt Ltd的案件。
美聯社起訴融文集團的案件。
ofir.dk起訴home.dk的案件。
QVC起訴Resultly的案件。
1.3 Python 3
在本書中,我們將完全使用Python 3進行開發。Python軟體基金會已經宣佈Python 2將會被逐步淘汰,並且只支援到
2020年;出於該原因,我們和許多其他Python愛好者一樣,已經將開發轉移到對Python 3的支援當中,在本書中我們將使用3.6版本。本書程式碼將相容Python 3.4+的版本。
如果你熟悉Python Virtual Environments或Anaconda的使用,那麼你可能已經知道如何在一個新環境中建立Python 3了。如果你希望以全域性形式安裝Python 3,那麼我們推薦你搜索自己使用的作業系統的特定文件。就我而言,我會直接使用Virtual Environment Wrapper(https://virtualenvwrapper.readthedocs.io/en/latest),這樣就可以很容易地對不同專案和Python版本使用多個不同的環境了。使用Conda環境或虛擬環境是最為推薦的,這樣你就可以輕鬆變更基於專案需求的依賴,而不會影響到你正在做的其他工作了。對於初學者來說,我推薦使用Conda,因為其需要的安裝工作更少一些。Conda的介紹文件(https://conda.io/docs/intro.html)是一個不錯的開始!從此刻開始,所有程式碼和命令都假設你已正確安裝Python 3並且正在使用Python 3.4+的環境。如果你看到了匯入或語法錯誤,請檢查你是否處於正
確的環境當中,檢視跟蹤資訊中是否存在Python 2.7的檔案路徑。