Python爬蟲的起點

第一章主要講解爬蟲相關的知識如:http、網頁、爬蟲法律等,讓你們對爬蟲有了一個比較完善的瞭解和一些題外的知識點。 html

在這裏插入圖片描述

今天這篇文章將是咱們第二章的第一篇,咱們從今天開始就正式進入實戰階段,後面將會有更多的實際案例。python

爬蟲系列文章的第一篇,豬哥便爲你們講解了HTTP原理,不少人好奇:好好的講爬蟲和HTTP有什麼關係?其實咱們常說的爬蟲(也叫網絡爬蟲)就是使用一些網絡協議發起的網絡請求,而目前使用最多的網絡協議即是HTTP/S網絡協議簇。git

1、Python有哪些網絡庫

在真實瀏覽網頁咱們是經過鼠標點擊網頁而後由瀏覽器幫咱們發起網絡請求,那在Python中咱們又如何發起網絡請求的呢?答案固然是庫,具體哪些庫?豬哥給你們列一下:程序員

  • Python2: httplib、httplib二、urllib、urllib二、urllib三、requests
  • Python3: httplib二、urllib、urllib三、requests

Python網絡請求庫有點多,並且還看見網上還都有用過的,那他們之間有何關係?又該如何選擇?github

  • 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,這個後面豬哥也會爲你們講解。web

2、requests介紹

**但願你們永遠記住:學任何一門語言,都不要忘記去看看官方文檔。**也許官方文檔不是最好的入門教程,但絕對是最新、最全的教學文檔!api

1.首頁

requests的官方文檔(目前已支持中文)連接:cn.python-requests.org 源代碼地址:github.com/kennethreit… 瀏覽器

在這裏插入圖片描述

從首頁中讓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 下完美運行

3、安裝requests

pip install requests

若是是pip3則使用

pip3 install requests

若是你使用anaconda則能夠

conda install requests

若是你不想用命令行,可在pycharm中這樣下載庫

在這裏插入圖片描述

4、爬蟲流程

下圖是豬哥以前工做總結的一個項目開發流程,算是比較詳細,在開發一個大型的項目真的須要這麼詳細,否則項目上線出故障或者修改需求都沒法作項目覆盤,到時候程序員就有可能背鍋祭天。。。

在這裏插入圖片描述

言歸正傳,給你們看項目的開發流程是想引出爬蟲爬取數據的流程:

  1. 肯定須要爬取的網頁
  2. 瀏覽器檢查數據來源(靜態網頁or動態加載)
  3. 尋找加載數據url的參數規律(如分頁)
  4. 代碼模擬請求爬取數據

5、爬取某東商品頁

豬哥就以某東商品頁爲例子帶你們學習爬蟲的簡單流程,爲何以某東下手而不是某寶?由於某東瀏覽商品頁不須要登陸,簡單便於你們快速入門!

1.第一步:瀏覽器中找到你想爬取的商品

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
ps:豬哥並非在開車哦,爲何選這款商品?由於後面會爬取這款商品的評價作數據分析,是否是很刺激!

2.第二步:瀏覽器檢查數據來源

打開瀏覽器調試窗口是爲了查看網絡請求,看看數據是怎麼加載的?是直接返回靜態頁面呢,仍是js動態加載呢?

在這裏插入圖片描述
鼠標右鍵而後點檢查或者直接F12便可打開調試窗口,這裏豬哥推薦你們使用Chrome瀏覽器,爲何?由於好用,程序員都在用!具體的Chrome如何調試,你們自行網上看教程!

打開調試窗口以後,咱們就能夠從新請求數據,而後查看返回的數據,肯定數據來源。

在這裏插入圖片描述

3.第三步:尋找加載數據url的參數規律

咱們能夠看到第一個請求連接:item.jd.com/1263013576.… 返回的數據即是咱們要的網頁數據。由於咱們是爬取商品頁,因此不存在分頁之說。

在這裏插入圖片描述

固然價格和一些優惠券等核心信息是經過另外的請求加載,這裏咱們暫時不討論,先完成咱們的第一個小例子!

4.第四步:代碼模擬請求爬取數據

獲取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()
複製代碼

檢查返回結果

在這裏插入圖片描述
至此咱們就完成了某東商品頁的爬取,雖然案例簡單,代碼不多,可是爬蟲的流程基本差很少,但願想學爬蟲的同窗本身動動手實踐一把,選擇本身喜歡的商品抓取一下,只有本身動手才能真的學到知識!

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請求的網站,能正常回應請求

對於HTTP的幾種請求方法,沒作過RestFul API的同窗並非很清楚每一個請求方式表達的含義,這裏給你們列一下:

想了解requests更多使用方法請參考:cn.python-requests.org

後面豬哥也會用大量案例來一點一點學習requests庫的一些使用技巧。

7、總結

今天爲你們簡單介紹了一下這個很是重要的庫:requests,requests能夠勝任不少簡單的爬蟲需求,它強大的功能以及優美的api獲得一致的認同。

有人多同窗會問:爬蟲到什麼境界纔算是入門?你會熟練使用requests庫去實現一些簡單的爬蟲功能就算入門,並非說須要會各類框架纔算是入門,相反能使用低級工具實現功能的才更具潛力!

若是你有 有趣的爬蟲案例或者想法,務必在下方留言,讓我看看大家的騷操做。

相關文章
相關標籤/搜索