Python爬虫的起点
第一章主要講解爬蟲相關的知識如:http、網頁、爬蟲法律等,讓大家對爬蟲有了一個比較完善的了解和一些題外的知識點。
今天這篇文章將是我們第二章的第一篇,我們從今天開始就正式進入實戰階段,后面將會有更多的實際案例。
爬蟲系列文章的第一篇,豬哥便為大家講解了HTTP原理,很多人好奇:好好的講爬蟲和HTTP有什么關系?其實我們常說的爬蟲(也叫網絡爬蟲)就是使用一些網絡協議發起的網絡請求,而目前使用最多的網絡協議便是HTTP/S網絡協議簇。
一、Python有哪些網絡庫
在真實瀏覽網頁我們是通過鼠標點擊網頁然后由瀏覽器幫我們發起網絡請求,那在Python中我們又如何發起網絡請求的呢?答案當然是庫,具體哪些庫?豬哥給大家列一下:
- Python2: httplib、httplib2、urllib、urllib2、urllib3、requests
- Python3: httplib2、urllib、urllib3、requests
Python網絡請求庫有點多,而且還看見網上還都有用過的,那他們之間有何關系?又該如何選擇?
- httplib/2:這是一個Python內置http庫,但是它是偏于底層的庫,一般不直接用。而httplib2是一個基于httplib的第三方庫,比httplib實現更完整,支持緩存、壓縮等功能。一般這兩個庫都用不到,如果需要自己 封裝網絡請求可能會需要用到。
- urllib/urllib2/urllib3:urlliib是一個基于httplib的上層庫,而urllib2和urllib3都是第三方庫,urllib2相對于urllib增加一些高級功能,如:HTTP身份驗證或Cookie等,在Python3中將urllib2合并到了urllib中。urllib3提供線程安全連接池和文件post等支持,與urllib及urllib2的關系不大。
- requests:requests庫是一個基于urllib/3的第三方網絡庫,它的特點是功能強大,API優雅。由上圖我們可以看到,對于http客戶端python官方文檔也推薦我們使用requests庫,實際工作中requests庫也是使用的比較多的庫。
綜上所述,我們選擇選擇requests庫作為我們爬蟲入門的起點。另外以上的這些庫都是同步網絡庫,如果需要高并發請求的話可以使用異步網絡庫:aiohttp,這個后面豬哥也會為大家講解。
二、requests介紹
**希望大家永遠記住:學任何一門語言,都不要忘記去看看官方文檔。**也許官方文檔不是最好的入門教程,但絕對是最新、最全的教學文檔!
1.首頁
requests的官方文檔(目前已支持中文)鏈接:http://cn.python-requests.org
源代碼地址:https://github.com/kennethreitz/requests
從首頁中讓HTTP服務人類這幾個字中我們便能看出,requests核心宗旨便是讓用戶使用方便,間接表達了他們設計優雅的理念。
注:PEP 20便是鼎鼎大名的Python之禪。
警告:非專業使用其他 HTTP 庫會導致危險的副作用,包括:安全缺陷癥、冗余代碼癥、重新發明輪子癥、啃文檔癥、抑郁、頭疼、甚至死亡。
2.功能特性
都說requests功能強大,那我們來看看requests到底有哪些功能特性吧:
- Keep-Alive & 連接池
- 國際化域名和 URL
- 帶持久 Cookie 的會話
- 瀏覽器式的 SSL 認證
- 自動內容解碼
- 基本/摘要式的身份認證
- 優雅的 key/value Cookie
- 自動解壓
- Unicode 響應體
- HTTP(S) 代理支持
- 文件分塊上傳
- 流下載
- 連接超時
- 分塊請求
- 支持 .netrc
requests 完全滿足今日 web 的需求。Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美運行
三、安裝requests
pip install requests
如果是pip3則使用
pip3 install requests
如果你使用anaconda則可以
conda install requests
如果你不想用命令行,可在pycharm中這樣下載庫
四、爬蟲流程
下圖是豬哥之前工作總結的一個項目開發流程,算是比較詳細,在開發一個大型的項目真的需要這么詳細,不然項目上線出故障或者修改需求都無法做項目復盤,到時候程序員就有可能背鍋祭天。。。
言歸正傳,給大家看項目的開發流程是想引出爬蟲爬取數據的流程:
五、爬取某東商品頁
豬哥就以某東商品頁為例子帶大家學習爬蟲的簡單流程,為什么以某東下手而不是某寶?因為某東瀏覽商品頁不需要登錄,簡單便于大家快速入門!
1.第一步:瀏覽器中找到你想爬取的商品
ps:豬哥并不是在開車哦,為什么選這款商品?因為后面會爬取這款商品的評價做數據分析,是不是很刺激!
2.第二步:瀏覽器檢查數據來源
打開瀏覽器調試窗口是為了查看網絡請求,看看數據是怎么加載的?是直接返回靜態頁面呢,還是js動態加載呢?
鼠標右鍵然后點檢查或者直接F12即可打開調試窗口,這里豬哥推薦大家使用Chrome瀏覽器,為什么?因為好用,程序員都在用!具體的Chrome如何調試,大家自行網上看教程!
打開調試窗口之后,我們就可以重新請求數據,然后查看返回的數據,確定數據來源。
3.第三步:尋找加載數據url的參數規律
我們可以看到第一個請求鏈接:https://item.jd.com/1263013576.html 返回的數據便是我們要的網頁數據。因為我們是爬取商品頁,所以不存在分頁之說。
當然價格和一些優惠券等核心信息是通過另外的請求加載,這里我們暫時不討論,先完成我們的第一個小例子!
4.第四步:代碼模擬請求爬取數據
獲取url鏈接之后我們來開始寫代碼吧
import requestsdef spider_jd():"""爬取京東商品頁"""url = 'https://item.jd.com/1263013576.html'try:r = requests.get(url)# 有時候請求錯誤也會有返回數據# raise_for_status會判斷返回狀態碼,如果4XX或5XX則會拋出異常r.raise_for_status()print(r.text[:500])except:print('爬取失敗')if __name__ == '__main__':spider_jd()檢查返回結果
至此我們就完成了某東商品頁的爬取,雖然案例簡單,代碼很少,但是爬蟲的流程基本差不多,希望想學爬蟲的同學自己動動手實踐一把,選擇自己喜歡的商品抓取一下,只有自己動手才能真的學到知識!
六、requests庫介紹
上面我們使用了requests的get方法,我們可以查看源碼發現還有其他幾個方法:post、put、patch、delete、options、head,他們就是對應HTTP的請求方法。
這里簡單給大家列一下,后面會用大量的案例來用而后學,畢竟枯燥的講解沒人愿意看。
注:httpbin.org是一個測試http請求的網站,能正常回應請求
對于HTTP的幾種請求方法,沒做過RestFul API的同學并不是很清楚每個請求方式表達的含義,這里給大家列一下:
- GET:獲取用戶列表:http://project.company.com/api/v1/users
- GET:獲取單個用戶:http://project.company.com/api/v1/users/{uid}
- POST:創建單個用戶:http://project.company.com/api/v1/users/{uid}
- PUT:完全替換用戶:http://project.company.com/api/v1/users/{uid}
- PATCH:局部更新用戶:http://project.company.com/api/v1/users/{uid}
- DELETE:刪除單個用戶:http://project.company.com/api/v1/users/{uid}
想了解requests更多使用方法請參考:http://cn.python-requests.org
后面豬哥也會用大量案例來一點一點學習requests庫的一些使用技巧。
七、總結
今天為大家簡單介紹了一下這個非常重要的庫:requests,requests可以勝任很多簡單的爬蟲需求,它強大的功能以及優美的api得到一致的認同。
有人多同學會問:爬蟲到什么境界才算是入門?你會熟練使用requests庫去實現一些簡單的爬蟲功能就算入門,并不是說需要會各種框架才算是入門,相反能使用低級工具實現功能的才更具潛力!
如果你有 有趣的爬蟲案例或者想法,務必在下方留言,讓我看看你們的騷操作。
更多爬蟲知識,敬請掃描下方二維碼關注豬哥爬蟲專欄!
總結
以上是生活随笔為你收集整理的Python爬虫的起点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PEP 20 -- The Zen of
- 下一篇: 七夕过后,你分析过自己单身原因的原因吗?