什麼是Python爬蟲?
如何學會使用Python爬蟲?
如何利用Python爬蟲事半功倍的處理數據?
...
看這一篇文章就夠了!
第一節:python爬蟲分類和robots協議
爬蟲一直是跟大數據關係比較密切的,大數據就是對海量數據處理的一些方式,包含對海量數據如何採集。以前對於數據的採集是通過日誌的方式來進行。而在現在的移動互聯時代,面對大量數據,我們如何去拿到我們想要的內容。靈感就來自於爬蟲。爬蟲在我們身邊一直存在,搜索引擎本身就屬於爬蟲。最早的搜索引擎就是數據庫關係建立的,隨著數據規模越來越大,發現僅依靠數據庫是不行的,搜索引擎誕生之後,發現數據太多了,而且為了迎合大眾,必須去不斷的收集這些信息。而實際上,最早遇到大數據難題的就是搜索引擎(雅虎、谷歌、百度等)。搜索引擎為了大量的自動化的去採集數據,所以編寫了爬蟲。
爬蟲,應該稱為網絡爬蟲,也叫網頁蜘蛛、網絡機器人、網絡螞蟻等。
爬取一般流程
1、初始一批URL, 將這些URL放到待爬取隊列
2、從隊列取出這些URL, 通過DNS解析IP, 對IP對應的站點下載HTML頁面, 保存到本地服務器中, 爬取完的URL放到已爬取隊列。
3、分析這些網頁內容, 找出網頁裡面的其他關心的URL鏈接, 繼續執行第2步, 直到爬取條件結束。>>點擊鏈接查看更多有關爬蟲和Robots協議的內容
第二節:python爬蟲urllib使用和進階
上節課已經介紹了爬蟲的基本概念和基礎內容,接下來就要開始內容的爬取了。
其實爬蟲就是瀏覽器,只不過它是一個特殊的瀏覽器。爬取網頁就是通過HTTP協議訪問相應的網頁,不過通過瀏覽器訪問往往是人的行為,把這種行為變成使用程序來訪問就是爬蟲的過程。
有的網站會設置反爬蟲策略來拒絕爬蟲對網站內容的爬取要求。此時我們要爬取這種網站的話,是要對程序進行包裝的,儘量去模擬人的行為來獲取網站內容。
urllib包
urllib是Python提供的一個工具包,用來處理url和相應的一些內容的。
Python 2中提供了urllib和urllib 2。urllib提供較為底層的接口, urllib2對urllib進行了進一步封裝。
Python 3中將urllib合併到了urllib 2中, 並只提供了標準庫urllib包。我們重點使用的是Python3,但是它們的接口都是相同的,掌握了就可以在任何場景使用。>>點擊鏈接查看有關urllib使用和進階的更多內容
第三節:python爬蟲URL編碼和GETPOST請求
本節課就要開始上手代碼了,注意認真聽講哦~
urllib.parse模塊
該模塊可以完成對url的編解碼。
先看一段代碼:
此時查看結果,程序顯示TypeError錯誤,urlencode函數第一參數要求是一個字典或者二元組序列。
接下來將對代碼一點點進行修改,逐步達到請求。
一般來說url中的地址部分, 一般不需要使用中文路徑, 但是參數部分, 不管GET還是POST方法, 提交的數據中,可能有斜杆、等號、問號等符號,這樣這些字符表示數據,不表示元字符。如果直接發給服務器端,就會導致接收方無法判斷誰是元字符, 誰是數據了。為了安全, 一般會將數據部分的字符做url編碼, 這樣就不會有歧義了。後來可以傳送中文, 同樣會做編碼, 一般先按照字符集的encoding要求轉換成字節序列, 每一個字節對應的十六進制字符串前加上百分號即可。
提交方法method
最常用的HTTP交互數據的方法是GET、POST。
GET方法, 數據是通過URL傳遞的, 也就是說數據是在HTTP報文的header部分。
POST方法, 數據是放在HTTP報文的body部分提交的。
數據都是鍵值對形式, 多個參數之間使用&符號連接。例如a=1&b=abc。
我們將data提交上去,就是發送post請求,如果對方的網站有響應,會返回數據,返回的數據是正好是json,所以對其用simplejson進行轉換。我們需要根據網站返回的結果,去選擇合適的方法處理轉換數據。>>點擊鏈接瞭解GET、POST方法的更多內容
第四節:python爬蟲AJAX數據爬取和HTTPS訪問
我們首先需要對之前所接觸的爬蟲的概念,爬取流程、爬蟲標準庫等內容做一個回顧。
通常我們在大多數情況下編寫的爬蟲都為聚焦爬蟲。
本節課我們通過爬取“豆瓣電影”的”最近熱門電影”的“熱門”手把手教你處理JSON數據。
監察頁面源代碼,可以看到很多內容,只針對熱門電影這一部分進行分析。
然後複製地址進行操作分析。通過分析, 我們知道這部分內容, 是通過AJAX從後臺拿到的Json數據。
訪問的URL是https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
,其中%E7%83%AD%E9%97%A8
是utf-8編碼的中文“熱門”。
接下來對這裡面的內容進行分析:
最終得到這麼一個結果!
因為每個企業處理的方式可能會不太一樣,返回的數據有可能是html,也有可能是JSON。所以說處理的方式必須一致,或者把函數封裝在一個方法中才是我們需要思考的重點。往往我們會為一些特定數據、特定網站寫一個特定的爬蟲。因為,每一個網站的分析和提取方式可能是不一樣的。現在我們只是簡單做了一個JSON的處理。但如果是網頁解析,則是會非常麻煩的,尤其是網頁一旦更換網頁模板,我們則需要重新去寫網頁的解析方式。
HTTPS證書忽略
HTTPS使用SSL安全套接層協議, 在傳輸層對網絡數據進行加密。HTTPS使用的時候需要證書, 而證書需要CA認證。CA(Certificate Authority) 是數字證書認證中心的簡稱, 是指發放、管理、廢除數字證書的機構。
CA是受信任的第三方,有CA簽發的證書具有可信性。如果用戶由於信任了CA簽發的證書導致的損失,可以追究CA的法律責任。
CA是層級結構,下級CA信任上級CA,且有上級CA頒發給下級CA證書並認證。
一些網站, 例如淘寶, 使用HTTPS加密數據更加安全。
通過HTTPS訪問12306的時候, 失敗的原因在於12306的證書未通過CA認證, 它是自己生成的證書, 不可信。而其它網站訪問,如https://www.baidu.com/ 並沒有提示的原因,它的證書的發行者受信任,且早就存儲在當前系統中。
能否像瀏覽器一樣,忽略證書不安全信息呢?>>點擊鏈接查看如何操作
第五節:Python實現urllib3和requests庫使用
urllib3庫
標準庫urllib缺少了一些關鍵的功能, 非標準庫的第三方庫urllib3提供了, 比如說連接池管理。
這個封裝的屬性和方法還是比較原始的,我們對於這樣的使用肯定是不行的,那我們需要用什麼呢?接著來講requests庫。
requests庫
requests使用了urllib3, 但是API更加友好, 推薦使用。>>點擊鏈接查看源碼實戰
第六節:python爬蟲實戰實現XPath和lxml
本節介紹了用XPath類似於路徑的設計遍歷或者查詢其中的某些元素或者元素的屬性。
HTML解析
通過上面的庫, 都可以拿到HTML內容。HTML的內容返回給瀏覽器, 瀏覽器就會解析它, 並對它渲染。
HTML超文本表示語言, 設計的初衷就是為了超越普通文本, 讓文本表現力更強。
XML擴展標記語言, 不是為了代替HTML, 而是覺得HTML的設計中包含了過多的格式, 承擔了一部分數據之外的任務, 所以才設計了XML只用來描述數據。
HTML和XML都有結構, 使用標記形成樹型的嵌套結構。DOM(Document Object Model) 來解析這種嵌套樹型結構, 瀏覽器往往都提供了對DOM操作的API, 可以用面向對象的方式來操作DOM。
XPath
XPath是一門在XML文檔中查找信息的語言。XPath可用來在XML文檔中對元素和屬性進行遍歷。
XPath 術語
在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、註釋以及文檔(根)節點。XML 文檔是被作為節點樹來對待的。樹的根被稱為文檔節點或者根節點。>>查看更多
獲取更多Python內容請訂閱Python學習站官方技術圈!