日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫的起点

發(fā)布時間:2024/9/30 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫的起点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一章主要講解爬蟲相關(guān)的知識如:http、網(wǎng)頁、爬蟲法律等,讓大家對爬蟲有了一個比較完善的了解和一些題外的知識點。

今天這篇文章將是我們第二章的第一篇,我們從今天開始就正式進(jìn)入實戰(zhàn)階段,后面將會有更多的實際案例。

爬蟲系列文章的第一篇,豬哥便為大家講解了HTTP原理,很多人好奇:好好的講爬蟲和HTTP有什么關(guān)系?其實我們常說的爬蟲(也叫網(wǎng)絡(luò)爬蟲)就是使用一些網(wǎng)絡(luò)協(xié)議發(fā)起的網(wǎng)絡(luò)請求,而目前使用最多的網(wǎng)絡(luò)協(xié)議便是HTTP/S網(wǎng)絡(luò)協(xié)議簇。

一、Python有哪些網(wǎng)絡(luò)庫

在真實瀏覽網(wǎng)頁我們是通過鼠標(biāo)點擊網(wǎng)頁然后由瀏覽器幫我們發(fā)起網(wǎng)絡(luò)請求,那在Python中我們又如何發(fā)起網(wǎng)絡(luò)請求的呢?答案當(dāng)然是庫,具體哪些庫?豬哥給大家列一下:

  • Python2: httplib、httplib2、urllib、urllib2、urllib3、requests
  • Python3: httplib2、urllib、urllib3、requests

Python網(wǎng)絡(luò)請求庫有點多,而且還看見網(wǎng)上還都有用過的,那他們之間有何關(guān)系?又該如何選擇?

  • httplib/2:這是一個Python內(nèi)置http庫,但是它是偏于底層的庫,一般不直接用。而httplib2是一個基于httplib的第三方庫,比httplib實現(xiàn)更完整,支持緩存、壓縮等功能。一般這兩個庫都用不到,如果需要自己 封裝網(wǎng)絡(luò)請求可能會需要用到。
  • urllib/urllib2/urllib3:urlliib是一個基于httplib的上層庫,而urllib2和urllib3都是第三方庫,urllib2相對于urllib增加一些高級功能,如:HTTP身份驗證或Cookie等,在Python3中將urllib2合并到了urllib中。urllib3提供線程安全連接池和文件post等支持,與urllib及urllib2的關(guān)系不大。
  • requests:requests庫是一個基于urllib/3的第三方網(wǎng)絡(luò)庫,它的特點是功能強大,API優(yōu)雅。由上圖我們可以看到,對于http客戶端python官方文檔也推薦我們使用requests庫,實際工作中requests庫也是使用的比較多的庫。

綜上所述,我們選擇選擇requests庫作為我們爬蟲入門的起點。另外以上的這些庫都是同步網(wǎng)絡(luò)庫,如果需要高并發(fā)請求的話可以使用異步網(wǎng)絡(luò)庫:aiohttp,這個后面豬哥也會為大家講解。

二、requests介紹

**希望大家永遠(yuǎn)記住:學(xué)任何一門語言,都不要忘記去看看官方文檔。**也許官方文檔不是最好的入門教程,但絕對是最新、最全的教學(xué)文檔!

1.首頁

requests的官方文檔(目前已支持中文)鏈接:http://cn.python-requests.org
源代碼地址:https://github.com/kennethreitz/requests

從首頁中讓HTTP服務(wù)人類這幾個字中我們便能看出,requests核心宗旨便是讓用戶使用方便,間接表達(dá)了他們設(shè)計優(yōu)雅的理念。
注:PEP 20便是鼎鼎大名的Python之禪。

警告:非專業(yè)使用其他 HTTP 庫會導(dǎo)致危險的副作用,包括:安全缺陷癥、冗余代碼癥、重新發(fā)明輪子癥、啃文檔癥、抑郁、頭疼、甚至死亡。

2.功能特性

都說requests功能強大,那我們來看看requests到底有哪些功能特性吧:

  • Keep-Alive & 連接池
  • 國際化域名和 URL
  • 帶持久 Cookie 的會話
  • 瀏覽器式的 SSL 認(rèn)證
  • 自動內(nèi)容解碼
  • 基本/摘要式的身份認(rèn)證
  • 優(yōu)雅的 key/value Cookie
  • 自動解壓
  • Unicode 響應(yīng)體
  • 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中這樣下載庫

四、爬蟲流程

下圖是豬哥之前工作總結(jié)的一個項目開發(fā)流程,算是比較詳細(xì),在開發(fā)一個大型的項目真的需要這么詳細(xì),不然項目上線出故障或者修改需求都無法做項目復(fù)盤,到時候程序員就有可能背鍋祭天。。。

言歸正傳,給大家看項目的開發(fā)流程是想引出爬蟲爬取數(shù)據(jù)的流程:

  • 確定需要爬取的網(wǎng)頁
  • 瀏覽器檢查數(shù)據(jù)來源(靜態(tài)網(wǎng)頁or動態(tài)加載)
  • 尋找加載數(shù)據(jù)url的參數(shù)規(guī)律(如分頁)
  • 代碼模擬請求爬取數(shù)據(jù)
  • 五、爬取某東商品頁

    豬哥就以某東商品頁為例子帶大家學(xué)習(xí)爬蟲的簡單流程,為什么以某東下手而不是某寶?因為某東瀏覽商品頁不需要登錄,簡單便于大家快速入門!

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




    ps:豬哥并不是在開車哦,為什么選這款商品?因為后面會爬取這款商品的評價做數(shù)據(jù)分析,是不是很刺激!

    2.第二步:瀏覽器檢查數(shù)據(jù)來源

    打開瀏覽器調(diào)試窗口是為了查看網(wǎng)絡(luò)請求,看看數(shù)據(jù)是怎么加載的?是直接返回靜態(tài)頁面呢,還是js動態(tài)加載呢?

    鼠標(biāo)右鍵然后點檢查或者直接F12即可打開調(diào)試窗口,這里豬哥推薦大家使用Chrome瀏覽器,為什么?因為好用,程序員都在用!具體的Chrome如何調(diào)試,大家自行網(wǎng)上看教程!

    打開調(diào)試窗口之后,我們就可以重新請求數(shù)據(jù),然后查看返回的數(shù)據(jù),確定數(shù)據(jù)來源。

    3.第三步:尋找加載數(shù)據(jù)url的參數(shù)規(guī)律

    我們可以看到第一個請求鏈接:https://item.jd.com/1263013576.html 返回的數(shù)據(jù)便是我們要的網(wǎng)頁數(shù)據(jù)。因為我們是爬取商品頁,所以不存在分頁之說。

    當(dāng)然價格和一些優(yōu)惠券等核心信息是通過另外的請求加載,這里我們暫時不討論,先完成我們的第一個小例子!

    4.第四步:代碼模擬請求爬取數(shù)據(jù)

    獲取url鏈接之后我們來開始寫代碼吧

    import requestsdef spider_jd():"""爬取京東商品頁"""url = 'https://item.jd.com/1263013576.html'try:r = requests.get(url)# 有時候請求錯誤也會有返回數(shù)據(jù)# raise_for_status會判斷返回狀態(tài)碼,如果4XX或5XX則會拋出異常r.raise_for_status()print(r.text[:500])except:print('爬取失敗')if __name__ == '__main__':spider_jd()

    檢查返回結(jié)果

    至此我們就完成了某東商品頁的爬取,雖然案例簡單,代碼很少,但是爬蟲的流程基本差不多,希望想學(xué)爬蟲的同學(xué)自己動動手實踐一把,選擇自己喜歡的商品抓取一下,只有自己動手才能真的學(xué)到知識!

    六、requests庫介紹

    上面我們使用了requests的get方法,我們可以查看源碼發(fā)現(xiàn)還有其他幾個方法:post、put、patch、delete、options、head,他們就是對應(yīng)HTTP的請求方法。

    這里簡單給大家列一下,后面會用大量的案例來用而后學(xué),畢竟枯燥的講解沒人愿意看。

    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請求的網(wǎng)站,能正常回應(yīng)請求

    對于HTTP的幾種請求方法,沒做過RestFul API的同學(xué)并不是很清楚每個請求方式表達(dá)的含義,這里給大家列一下:

    • GET:獲取用戶列表:http://project.company.com/api/v1/users
    • GET:獲取單個用戶:http://project.company.com/api/v1/users/{uid}
    • POST:創(chuàng)建單個用戶: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

    后面豬哥也會用大量案例來一點一點學(xué)習(xí)requests庫的一些使用技巧。

    七、總結(jié)

    今天為大家簡單介紹了一下這個非常重要的庫:requests,requests可以勝任很多簡單的爬蟲需求,它強大的功能以及優(yōu)美的api得到一致的認(rèn)同。

    有人多同學(xué)會問:爬蟲到什么境界才算是入門?你會熟練使用requests庫去實現(xiàn)一些簡單的爬蟲功能就算入門,并不是說需要會各種框架才算是入門,相反能使用低級工具實現(xiàn)功能的才更具潛力!

    如果你有 有趣的爬蟲案例或者想法,務(wù)必在下方留言,讓我看看你們的騷操作。

    更多爬蟲知識,敬請掃描下方二維碼關(guān)注豬哥爬蟲專欄!

    總結(jié)

    以上是生活随笔為你收集整理的Python爬虫的起点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。