今天跟你們出的這篇文章,是從爬蟲的起點開始講起,這裏的Python學習教程,一篇文章帶你貫穿爬蟲始末!以前也夠跟你們出過相關的Python相關的Python學習教程,夥伴們也能夠翻閱一下之前的!html
爬蟲系列文章的第一篇,這裏便爲你們講解了HTTP原理,不少人好奇:好好的講爬蟲和HTTP有什麼關係?其實咱們常說的爬蟲(也叫網絡爬蟲)就是使用一些網絡協議發起的網絡請求,而目前使用最多的網絡協議即是HTTP/S網絡協議簇。python
1、Python有哪些網絡庫程序員
在真實瀏覽網頁咱們是經過鼠標點擊網頁而後由瀏覽器幫咱們發起網絡請求,那在Python中咱們又如何發起網絡請求的呢?答案固然是庫,具體哪些庫?豬哥給你們列一下:web
Python網絡請求庫有點多,並且還看見網上還都有用過的,那他們之間有何關係?又該如何選擇?api
httplib/2:瀏覽器
這是一個Python內置http庫,可是它是偏於底層的庫,通常不直接用。緩存
而httplib2是一個基於httplib的第三方庫,比httplib實現更完整,支持緩存、壓縮等功能。安全
通常這兩個庫都用不到,若是須要本身 封裝網絡請求可能會須要用到。bash
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,這個後面豬哥也會爲你們講解。
2、requests介紹
但願你們永遠記住:學任何一門語言,都不要忘記去看看官方文檔。也許官方文檔不是最好的入門教程,但絕對是最新、最全的教學文檔!
1.首頁
requests核心宗旨即是讓用戶使用方便,間接表達了他們設計優雅的理念。
【注意】:非專業使用其餘 HTTP 庫會致使危險的反作用,包括:安全缺陷症、冗餘代碼症、從新發明輪子症、啃文檔症、抑鬱、頭疼、甚至死亡。
2.功能特性
都說requests功能強大,那咱們來看看requests到底有哪些功能特性吧:
requests 徹底知足今日 web 的需求。Requests 支持 Python 2.6—2.7以及3.3—3.7,並且能在 PyPy 下完美運行。
3、安裝requests
pip 安裝:
pip install requests
若是是pip3則使用
pip3 install requests
若是你使用anaconda則能夠
conda install requests
若是你不想用命令行,可在pycharm中這樣下載庫
4、爬蟲流程
下圖是以前工做總結的一個項目開發流程,算是比較詳細,在開發一個大型的項目真的須要這麼詳細,否則項目上線出故障或者修改需求都沒法作項目覆盤,到時候程序員就有可能背鍋祭天。。。
言歸正傳,給你們看項目的開發流程是想引出爬蟲爬取數據的流程:
5、爬取某東商品頁
以某東商品頁爲例子帶你們學習爬蟲的簡單流程,爲何以某東下手而不是某寶?由於某東瀏覽商品頁不須要登陸,簡單便於你們快速入門!
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()
複製代碼
檢查返回結果
至此咱們就完成了某東商品頁的爬取,雖然案例簡單,代碼不多,可是爬蟲的流程基本差很少,但願想學爬蟲的同窗本身動動手實踐一把,選擇本身喜歡的商品抓取一下,只有本身動手才能真的學到知識!
6、requests庫介紹
上面咱們使用了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請求的網站,能正常回應請求
7、總結
今天爲你們簡單介紹了一下這個很是重要的庫:requests,requests能夠勝任不少簡單的爬蟲需求,它強大的功能以及優美的api獲得一致的認同。
有人多同窗會問:Python爬蟲到什麼境界纔算是入門?你會熟練使用requests庫去實現一些簡單的爬蟲功能就算入門,並非說須要會各類框架纔算是入門,相反能使用低級工具實現功能的才更具潛力!
若是你有 有趣的爬蟲案例或者想法,能夠留言哈,根你們分享一下你的騷操做~
更多的Python學習教程也會繼續爲你們更新!