第一章主要講解爬蟲相關的知識如:http、網頁、爬蟲法律等,讓你們對爬蟲有了一個比較完善的瞭解和一些題外的知識點。 html
今天這篇文章將是咱們第二章的第一篇,咱們從今天開始就正式進入實戰階段,後面將會有更多的實際案例。python
爬蟲系列文章的第一篇,豬哥便爲你們講解了HTTP原理,不少人好奇:好好的講爬蟲和HTTP有什麼關係?其實咱們常說的爬蟲(也叫網絡爬蟲)就是使用一些網絡協議發起的網絡請求,而目前使用最多的網絡協議即是HTTP/S網絡協議簇。git
在真實瀏覽網頁咱們是經過鼠標點擊網頁而後由瀏覽器幫咱們發起網絡請求,那在Python中咱們又如何發起網絡請求的呢?答案固然是庫,具體哪些庫?豬哥給你們列一下:程序員
Python網絡請求庫有點多,並且還看見網上還都有用過的,那他們之間有何關係?又該如何選擇?github
綜上所述,咱們選擇選擇requests庫做爲咱們爬蟲入門的起點。另外以上的這些庫都是同步網絡庫,若是須要高併發請求的話可使用異步網絡庫:aiohttp,這個後面豬哥也會爲你們講解。web
**但願你們永遠記住:學任何一門語言,都不要忘記去看看官方文檔。**也許官方文檔不是最好的入門教程,但絕對是最新、最全的教學文檔!api
requests的官方文檔(目前已支持中文)連接:cn.python-requests.org 源代碼地址:github.com/kennethreit… 瀏覽器
從首頁中讓HTTP服務人類
這幾個字中咱們便能看出,requests核心宗旨即是讓用戶使用方便,間接表達了他們設計優雅的理念。緩存
Python之禪
。
警告:非專業使用其餘 HTTP 庫會致使危險的反作用,包括:安全缺陷症、冗餘代碼症、從新發明輪子症、啃文檔症、抑鬱、頭疼、甚至死亡。安全
都說requests功能強大,那咱們來看看requests到底有哪些功能特性吧:
requests 徹底知足今日 web 的需求。Requests 支持 Python 2.6—2.7以及3.3—3.7,並且能在 PyPy 下完美運行
pip install requests
若是是pip3則使用
pip3 install requests
若是你使用anaconda則能夠
conda install requests
若是你不想用命令行,可在pycharm中這樣下載庫
下圖是豬哥以前工做總結的一個項目開發流程,算是比較詳細,在開發一個大型的項目真的須要這麼詳細,否則項目上線出故障或者修改需求都沒法作項目覆盤,到時候程序員就有可能背鍋祭天。。。
言歸正傳,給你們看項目的開發流程是想引出爬蟲爬取數據的流程:
豬哥就以某東商品頁爲例子帶你們學習爬蟲的簡單流程,爲何以某東下手而不是某寶?由於某東瀏覽商品頁不須要登陸,簡單便於你們快速入門!
打開瀏覽器調試窗口是爲了查看網絡請求,看看數據是怎麼加載的?是直接返回靜態頁面呢,仍是js動態加載呢?
鼠標右鍵而後點檢查或者直接F12便可打開調試窗口,這裏豬哥推薦你們使用Chrome瀏覽器,爲何?由於好用,程序員都在用!具體的Chrome如何調試,你們自行網上看教程!打開調試窗口以後,咱們就能夠從新請求數據,而後查看返回的數據,肯定數據來源。
咱們能夠看到第一個請求連接:item.jd.com/1263013576.… 返回的數據即是咱們要的網頁數據。由於咱們是爬取商品頁,因此不存在分頁之說。
固然價格和一些優惠券等核心信息是經過另外的請求加載,這裏咱們暫時不討論,先完成咱們的第一個小例子!
獲取url連接以後咱們來開始寫代碼吧
import requests
def 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的get方法,咱們能夠查看源碼發現還有其餘幾個方法:post、put、patch、delete、options、head,他們就是對應HTTP的請求方法。
這裏簡單給你們列一下,後面會用大量的案例來 用然後學,畢竟枯燥的講解沒人願意看。requests.post('http://httpbin.org/post', data = {'key':'value'})
requests.patch('http://httpbin.org/post', data = {'key':'value'})
requests.put('http://httpbin.org/put', data = {'key':'value'})
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
複製代碼
注:httpbin.org是一個測試http請求的網站,能正常回應請求
對於HTTP的幾種請求方法,沒作過RestFul API的同窗並非很清楚每一個請求方式表達的含義,這裏給你們列一下:
想了解requests更多使用方法請參考:cn.python-requests.org
後面豬哥也會用大量案例來一點一點學習requests庫的一些使用技巧。
今天爲你們簡單介紹了一下這個很是重要的庫:requests,requests能夠勝任不少簡單的爬蟲需求,它強大的功能以及優美的api獲得一致的認同。
有人多同窗會問:爬蟲到什麼境界纔算是入門?你會熟練使用requests庫去實現一些簡單的爬蟲功能就算入門,並非說須要會各類框架纔算是入門,相反能使用低級工具實現功能的才更具潛力!
若是你有 有趣的爬蟲案例或者想法,務必在下方留言,讓我看看大家的騷操做。