關于Python網(wǎng)絡爬蟲requests庫的介紹
1. 什么是網(wǎng)絡爬蟲
簡單來說,就是構建一個程序,以自動化的方式從網(wǎng)絡上下載、解析和組織數(shù)據(jù)。
就像我們?yōu)g覽網(wǎng)頁的時候,對于我們感興趣的內(nèi)容我們會復制粘貼到自己的筆記本中,方便下次閱讀瀏覽——網(wǎng)絡爬蟲幫我們自動完成這些內(nèi)容
當然如果遇到一些無法復制粘貼的網(wǎng)站——網(wǎng)絡爬蟲就更能顯示它的力量了
為什么需要網(wǎng)絡爬蟲
當我們需要做一些數(shù)據(jù)分析的時候——而很多時候這些數(shù)據(jù)存儲在網(wǎng)頁中,手動下載需要花費的時間太長,這時候我們就需要網(wǎng)絡爬蟲幫助我們自動爬取這些數(shù)據(jù)來(當然我們會過濾掉網(wǎng)頁上那些沒用的東西)
網(wǎng)絡爬蟲的應用
訪問和收集網(wǎng)絡數(shù)據(jù)有十分廣泛的應用,其中很多屬于數(shù)據(jù)科學領域 我們來看看下面這些例子:
淘寶網(wǎng)的賣家需要從海量的評價中尋找到有用的正面的和反面的信息,來幫助他進一步抓住顧客的心,分析顧客的購物心理有學者在twitter、微博等社交媒體上爬取信息來構建一個數(shù)據(jù)集,從而建立一個識別抑郁癥和自殺念頭的預測模型——讓更多需要援助的人得到幫助——當然我們也需要考慮到隱私相關的問題——但這很酷不是嗎?
作為一名人工智能工程師,他們從Ins上爬取志愿者所展示的喜好的圖片,來訓練深度學習模型,從而預測給出的圖像是否會被志愿者所喜好——手機制造商將這些模型納入他們的圖片應用程序中,推送給你。電商平臺的數(shù)據(jù)科學家爬取用戶瀏覽商品的信息,進行分析和預測,以便推送給用戶他最想要了解和購買的商品
是的!網(wǎng)絡爬蟲的應用十分廣泛,小到我們?nèi)粘S脕砼颗廊∫恍└咔宓谋诩垼瑘D片;大到人工智能、深度學習、商業(yè)策略制定的數(shù)據(jù)來源等。
這個時代是數(shù)據(jù)的時代,數(shù)據(jù)就是“新石油”
2. 網(wǎng)絡傳輸協(xié)議HTTP
沒錯,講到網(wǎng)絡爬蟲一定繞不開的就是這個HTTP,當然我們不需要像網(wǎng)絡工程師那樣詳細的了解協(xié)議定義的方方面面,但是作為入門我們還是得具有一定的認識才行
國際標準化組織ISO維護了開放式通信系統(tǒng)互聯(lián)參考模型OSI,而該模型將計算機通信結構分為七層
- 物理層:包括以太網(wǎng)協(xié)議、USB協(xié)議、藍牙協(xié)議等
- 數(shù)據(jù)鏈路層:包含以太網(wǎng)協(xié)議
- 網(wǎng)絡層:包含IP協(xié)議
- 傳輸層:包含TCP、UDP協(xié)議
- 會話層:包含用于打開/關閉和管理會話的協(xié)議
- 表示層:包含保護格式還和翻譯數(shù)據(jù)的協(xié)議
- 應用層:包含HTTP和DNS網(wǎng)絡服務協(xié)議
現(xiàn)在來看看HTTP請求和響應是什么樣子的(因為后面會涉及自定義請求頭) 一般請求消息由一下內(nèi)容構成:
- 請求行
- 多個請求頭
- 空行
- 可選的消息主體
具體的請求消息:
GET https://www.baidu.com/?tn=80035161_1_dg HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-GB;q=0.5,en;q=0.3 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362 Accept-Encoding: gzip, deflate, br Host: www.baidu.com Connection: Keep-Alive
這個是訪問百度時的請求,當然里面的很多細節(jié)我們也不需要知道,因為python的request包會幫助我們完成我們的爬取
當然我們也能查看網(wǎng)頁對我們的請求返回的信息:
HTTP/1.1 200 OK //這邊的狀態(tài)碼為200表示我們的請求成功 Bdpagetype: 2 Cache-Control: private Connection: keep-alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Sun, 09 Aug 2020 02:57:00 GMT Expires: Sun, 09 Aug 2020 02:56:59 GMT X-Ua-Compatible: IE=Edge,chrome=1 Transfer-Encoding: chunked
3. requests庫(不喜歡理論知識的同學們可以直接來這里哦)
我們知道其實python還預置了另外的處理HTTP的庫——urllib和urllib3,但是requests庫學起來更容易——代碼更簡潔易懂。 當然當我們成功爬取下網(wǎng)頁時,將要將里面我們感興趣的東西提取出來的時候, 我們會提到另一個十分有用的庫——美麗湯(Beautiful Soup)——這又是后話了
1. requests庫的安裝
這里我們可以直接找到requests的.whl文件安裝,也可以直接使用pip來安裝(當然如果有pycharm的同學可以直接從里面的環(huán)境加載中下載)
2. 實戰(zhàn)
下面我們開始正式爬取網(wǎng)頁
代碼如下:
import requests target = 'https://www.baidu.com/' get_url = requests.get(url=target) print(get_url.status_code) print(get_url.text)
輸出結果
200 //返回狀態(tài)碼200表示請求成功 <!DOCTYPE html>//這里刪除了很多內(nèi)容,實際上輸出的網(wǎng)頁信息比這要多得多 <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html; charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge> <meta content=always name=referrer> <link rel=stylesheet type=text/css src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
上面五行代碼做了很多事情,我們已經(jīng)可以將網(wǎng)頁的HTML內(nèi)容全部抓取
第一行代碼:加載requests庫 第二行代碼:給出需要爬取的網(wǎng)站 第三行代碼:使用requests進行請求 一般的格式如下:
對象 = requests.get(url=你想要爬取的網(wǎng)站地址)
第四行代碼:返回請求的狀態(tài)碼 第五行代碼:輸出相應的內(nèi)容主體
當然我們還可以打印更多的內(nèi)容
import requests target = 'https://www.baidu.com/' get_url = requests.get(url=target) # print(get_url.status_code) # print(get_url.text) print(get_url.reason)//返回狀態(tài) print(get_url.headers) //返回HTTP響應中包含的服務器頭的內(nèi)容(和上面展示的內(nèi)容差不多) print(get_url.request) print(get_url.request.headers)//返回請求中頭的內(nèi)容
OK {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sun, 09 Aug 2020 04:14:22 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:23:55 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'} <PreparedRequest [GET]> {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
基本的網(wǎng)頁抓取就完成了,但是如果我們想要解析我們抓取的HTML格式的網(wǎng)頁呢,我們還需要學習正則表達式、Beautiful Soup庫的應用,這些我們下個博客再講解吧
到此這篇關于關于Python網(wǎng)絡爬蟲requests庫的介紹的文章就介紹到這了,更多相關Python網(wǎng)絡爬蟲requests庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Python中__new__和__init__的區(qū)別與聯(lián)系
在Python中,每個對象都有兩個特殊的方法:__new__和__init__,本文將詳細介紹這兩個方法的不同之處以及它們之間的聯(lián)系,具有一定的參考價值,感興趣的可以了解一下2023-12-12對pandas中時間窗函數(shù)rolling的使用詳解
今天小編就為大家分享一篇對pandas中時間窗函數(shù)rolling的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11解析Python中的eval()、exec()及其相關函數(shù)
本篇文章主要介紹了解析Python中的eval()、exec()及其相關函數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12django模型動態(tài)修改參數(shù),增加 filter 字段的方式
這篇文章主要介紹了django模型動態(tài)修改參數(shù),增加 filter 字段的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Python中DataFrame與內(nèi)置數(shù)據(jù)結構相互轉換的實現(xiàn)
pandas?支持我們從?Excel、CSV、數(shù)據(jù)庫等不同數(shù)據(jù)源當中讀取數(shù)據(jù),來構建?DataFrame。但有時數(shù)據(jù)并不來自這些外部數(shù)據(jù)源,這就涉及到了?DataFrame?和?Python?內(nèi)置數(shù)據(jù)結構之間的相互轉換,本文就來和大家詳細聊聊2023-02-02Python不使用int()函數(shù)把字符串轉換為數(shù)字的方法
今天小編就為大家分享一篇Python不使用int()函數(shù)把字符串轉換為數(shù)字的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07python實現(xiàn)在每個獨立進程中運行一個函數(shù)的方法
這篇文章主要介紹了python實現(xiàn)在每個獨立進程中運行一個函數(shù)的方法,涉及Python操作進程的相關技巧,需要的朋友可以參考下2015-04-04一文帶你深入理解Python的`functools.lru_cache`裝飾器
Python中的functools.lru_cache裝飾器是一個非常有用的裝飾器,它可以幫助我們優(yōu)化遞歸函數(shù),避免重復計算已經(jīng)計算過的值,在這篇文章中,我們將探討?functools.lru_cache?的工作原理以及如何使用它,感興趣的朋友跟著小編一起來學習吧2023-07-07