1. 程式人生 > >【Python3網路爬蟲】 requests庫的使用

【Python3網路爬蟲】 requests庫的使用

1.requests庫可以使Cookies,登陸驗證,代理設定更加簡單。

一段程式碼,去對比urllib庫的使用:

import requests
r = requests.get('https://wwww.baidu.com')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.cookies)

這些可以體現在請求上的相對整潔與直白 類似的POST請求與PUT還有DELETE都是直接使用對應的方法。

2.GET請求

import requests
r = requests.get('http://httpbin.org/get')
print(r.text


網頁返回型別是str型別,但是它很特殊,是JSON格式,所以如果想解析返回結果,得到一個字典格式的話,可以直接呼叫json()方法。

但是如果返回結果不是JSON格式,便會出現解析錯誤,丟擲json.decoder.JSONDecodeError異常。

抓取網頁 配合正則表示式就可以提取想要的網頁了 但是在抓取知乎一樣的話一定要新增headers 不然會被拒絕訪問

抓取二進位制資料 圖片、音訊、視訊這些檔案的本質就是二進位制碼組成、由於特定的儲存格式和對應的解析方式,我們才可以看到形形色色的多媒體/所以要抓取二進位制資料就需要拿到他們的二進位制碼。

import requests

r = requests.get("http://gethub.com/favicon.ico")
with open('favicon','wb') as f:
    f.write(r.content) 

這裡使用了open方法,它的第一個引數是檔名稱。第二個引數代表以二進位制的形式開啟,可以想檔案裡寫入二進位制資料。

3.POST請求

與GET請求的使用非常相似

4.響應

傳送請求後,得到的自然是響應。 有很多對應的屬性和方法

高階用法

1.檔案上傳

我們知道requests可以模擬提交一些資料,假如網站上需要上傳檔案,我們也可以用它來實現。

import requests

files = {'file':open('favicon.ico','rb')}
r = requests.post('http://httpbin.org/post',files = files)
print(r.text)

上傳的檔案會在字典  file 鍵對應下 是二進位制資料

2.Cookies

使用urllib庫處理過Cookies,寫法比較複雜,而使用requests,獲取和設定Cookies只需要簡單的的一步即可完成。

import requests

r = requests.get('https://www.baidu.com')
print(r.cookies)
for key value in r.cookies.items():
    print(key+'='+value) 

這裡首先呼叫cookies屬性既可以成功獲取Cookies,可以發現它是RequestCookieJar型別

然後用items()方法將其轉化為元組組成列表,遍歷輸出每一Cookie的名稱和值,實現Cookie的遍歷解析。

當然我們可以直接用Cookie來維持登陸狀態,登陸的時候測試了一下教務線上。發現完全可以複製下Cookies然後在請求的時候新增到Headers中。

3.會話維持

在requests中,如果直接利用get()和post()等方法的卻可以做到模擬網頁的請求,但是實際上是相當於不同的會話,也可以說相當於你用了兩個瀏覽器打開了不同的頁面。

    若想維持同一個會話。可以設定一樣的cookies但是會比較繁瑣,有一個新的利器Session物件。

示例:

import requests

requests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.orh/cookies')
print(r.text)

這樣並不能獲取到設定的cookies

import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

成功獲取

所以Session可以做到模擬同一個會話而不用擔心Cookies的問題,它通常用於模擬登陸成功之後再進行下一步的操作。

Session在平常用得非常廣泛,可以用於模擬在一個瀏覽器中開啟同一站點的不同頁面,後面會有專門的章節來講解這部分內容。

4.SSL證書驗證

此外,requests還提供了證書驗證的功能。當傳送HTTP請求的時候,它會檢查SSL證書,我們可以使用verify引數控制是否檢查此證書。其實如果不加verify引數的話。預設是True ,會自動驗證。

前面我們提到過,12306證書沒有被官方CA機構信任,會出現證書驗證錯誤的結果,我們現在訪問它都可以看到一個證書問題的頁面。

import requests
response = requests.get('https://www.12306.cn',verify = False)
print(response.status_code)

可以發現 報了一個警告,它建議我們給它指定證書。可以通過設定忽略警告的方式來遮蔽警告。

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get('https://www.12306.cn',verify = False)
print(response.status_code)

或者通過捕獲警告到日誌的方式忽略警告:

import requests
import logging

logging.captureWarnings(True)
response = requests.get('http://www.12306.cn',verify = False)
print(response.status_code)


當然我們也可以指定一個本地證書 用作客戶端證書,這可以是單個檔案(包含金鑰和證書)或一個包含兩個檔案路徑的元組 :

import requests
response = requests.get('https://12306.cn',cert=('/path/server.crt','/path/key'))
print(response.status_code)

當然上面的程式碼是演示例項,我們需要crt和key檔案,並且指定它們的路徑。注意,本地私有證書必須是解密狀態,加密狀態的key是不支援的。

5.代理設定

大規模爬取的時候,很多網站可能會彈出驗證碼,或者跳轉到登陸頁面,更有甚者會直接封禁客戶端的IP,導致一定時間段內無法訪問。

為了防止這種情況的發生就需要設定代理來解決這個問題,這就需要用到代理來解決這個問題,這就需要用到proxies引數。

可以使用這樣的方式設定:

import requests

proxies = {
    "http":"http://10.10.1.10:3128",
    "https":"http://10.10.1.10:1080"
 }
requests.get("https://www.taobao.com",proxies = proxies)

當然直接執行這個例項可能無效,因為這個代理可能是無效的,要換成有效的代理,才可以得到。

若代理需要使用HTTP Basic Auth 可以使用類似http://user:[email protected]:port這樣的語法來設定代理。

示例:

import requests
proxies = {
    "http":"http://user:[email protected]:3128"
    
}
requests.get("https://www.taobao.com",proxies = proxies)

除了基本的HTTP代理外,requests還支援SOCKS協議的代理,示例如下:

import requests

proxies = {
    'http':'socks://user:[email protected]:port',
    'https':'socks://user:[email protected]:port'
 }
requests.get("https://www.taobao.com",proxies = proxies)

6.超時設定

和urllib庫裡的設定類似 ,但是在超時設定中。實際上timeout是可以分為兩個階段的,一個是連線(connect),一個是讀取(read),可以傳入到一個元組中。如果想永久等待們可以選擇不設定或者將timeout設定為None.

7.身份認證

在訪問網站的時候。可能會出現認證頁面。此時可以使用requests自帶的身份認證功能。示例如下:

import requests
from requests.auth import HTTPBasicAuth

r = requests.get('http://localhost:5000',auth=HTTPBasicAuth('username','password'))
print(r.status_code)

如果認證成功,則會返回200狀態碼,如果認證失敗,則返回401狀態碼。

當然如果引數都傳入一個HTTPBasicAuth類,就顯得有點煩瑣了,所以requests提供了一個更加簡單的寫法,可以直接傳入一個元組,它會預設使用HTTPBasicAuth這個類來認證。

所以上面的程式碼可以簡寫為:

import requests

r = requests.get('http://localhost:5000',auth=('username','password'))
print(r.status_code)

此外,requests還提供了其他認證方式,如OAuth認證,不過此時需要安裝oauth包。具體等我要用到的時候再去看吧。

8.Prepare Request(不是很懂具體是用來幹什麼的)

前面介紹urllib時,我們可以將請求表示為資料結構,其中各個引數都可以通過一個Request物件來表示。這在requests裡同樣可以做到,這個資料結構就叫Prepared Request 。

from requests import Request,Session

url = 'http://httpbin.org/post'
data = {
    'name':'Zen'
 }
headers = {
    'User-Agent':' 超級牛逼的什麼什麼瀏覽器,我就不說了'
}
s = Session()
req  = Request('POST',url,data=data,headers = headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)
這裡我們引入了Request ,然後用url、data、headers引數構造了一個Request物件,這時需要再呼叫Session的prepare_request()方法將其轉換為一個Prepared Request物件,然後呼叫send()方法傳送即可。

有了Request這個物件,就可以將請求當作獨立的物件來看待,這樣在進行佇列排程時會非常方便。

requests庫相比urllib庫的話,就方便直白很多了。

相關推薦

Python3網路爬蟲 requests的使用

1.requests庫可以使Cookies,登陸驗證,代理設定更加簡單。一段程式碼,去對比urllib庫的使用:import requests r = requests.get('https://www

Python爬蟲Requests的安裝

comm AS imp pypi pan span douban OS host 1.按照普通的pip不能行,說find不能 有位小傑控的大牛說了一句:換一個國內的更新源吧, pip install requests -i http://pypi.douban.com/si

爬蟲Requests 的入門學習

此為北理嵩天老師mooc課程【網路爬蟲與資訊提取】的課程學習筆記,附帶一些其他書籍部落格的資料。 1、安裝 Requests 庫 使用命令列輸入: pip install requests 或者: python -m pip install requests 2

爬蟲Requests 的入門學習

此為北理嵩天老師mooc課程【網路爬蟲與資訊提取】的課程學習筆記。 1安裝 Requests 庫 使用命令列輸入: pip install requests 或者: python -m pip install requests 2 requests 的常用

轉載python3.x爬蟲設定IP代理

- 爬取的網站採取了反爬取技術,高強度、高效率地爬取網頁資訊常常會給網站伺服器帶來巨大壓力,所以同一個IP反覆爬取同一個網頁,就很可能被封。 1. 所需庫: 安裝requests庫 安裝bs4庫 安裝lxml庫 2. 用法示例: 函式get_ip_li

Python網路爬蟲requestsScrapy爬蟲比較

requests庫Scrapy爬蟲比較 相同點: 都可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線 兩者可用性都好,文件豐富,入門簡單。 兩者都沒有處理JS,提交表單,應對驗證碼等功能(可擴充套件) 想爬取有驗證碼的,換需要學習別的庫知識。 不同點: Scrapy,非同

Python3網路爬蟲requests+mongodb+wordcloud 爬取豆瓣影評並生成詞雲

Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一 前言 二 豆瓣網影評爬取 網頁分析 程式碼編寫 三 資料庫實裝 四

Python3網路爬蟲requests爬取動態網頁內容

本文為學習筆記 學習博主:http://blog.csdn.net/c406495762 Python版本:python3.+ 執行環境:OSX IDE:pycharm 一、工具準備 抓包工具:在OSX下,我使用的是Charles4.0 下載連結以及安裝教

Python網路爬蟲Python維基百科網頁抓取(BeautifulSoup+Urllib2)

引言: 從網路提取資料的需求和重要性正在變得越來越迫切。 每隔幾個星期,我都會發現自己需要從網路中提取資料。 例如,上週我們正在考慮建立一個關於網際網路上可用的各種資料科學課程的熱度和情緒指數。 這不僅需要找到新的課程,而且還要抓住網路的評論,然後在

Pyhton網路爬蟲網路請求使用的urllib模組

python的簡單,讓我很是喜歡。所以在練習爬蟲和介面測試的時候,使用python來幫助進行網路請求。 Python2.x中會使用的標準庫有urllib、urllib2; Python3.x中使用

筆記3、初學python3網路爬蟲——urllib的使用

python3網路爬蟲——urllib庫的使用 學習指引:視訊教程《python3網路爬蟲實戰》 為了避免學習後短時間內遺忘,讓自己隨時可以查閱前方自己學過的知識,特意註冊csdn部落格,方便自己學習時做筆記,也方便隨時回顧。也希望自己的學習過程能給同樣初學

Python3網路爬蟲開發實戰3-基本的使用 2-使用requests 1-基本用法

1. 準備工作在開始之前,請確保已經正確安裝好了requests庫。如果沒有安裝,可以參考1.2.1節安裝。2. 例項引入urllib庫中的urlopen()方法實際上是以GET方式請求網頁,而requests中相應的方法就是get()方法,是不是感覺表達更明確一些?下面通過例項來看一下:import req

Python3 解決中文亂碼 requests中文亂碼問題別的部落格好多都是都是然並卵的教程

直接教程 s=requests.session() s.headers['Accept']='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'

筆記5、初學python3網路爬蟲——正則表示式的基本使用

python3網路爬蟲——正則表示式的基本使用 學習指引:視訊教程《python3網路爬蟲實戰》 為了避免學習後短時間內遺忘,讓自己隨時可以查閱前方自己學過的知識,特意註冊csdn部落格,方便自己學習時做筆記,也方便隨時回顧。也希望自己的學習過程能給同樣初學

專欄 - Python3網路爬蟲入門

Python3網路爬蟲入門 歡迎Follow、Star:https://github.com/Jack-Cherish/python-spider 進階教程:http://cuijiahua.com/blog/spider/

網路爬蟲:Python:url基礎:urllib

文章目錄 1 簡單介紹 2 相關區別 3 例項講解 (1)urllib (2)ulrlib2 (3)httplib (4)requests 4 專案實戰 1 簡單介紹

urllib的學習總結(python3網路爬蟲開發實戰專案)

urllib庫是python內建的HTTP請求庫,包含以下四個模組: request:最基本的HTTP請求模組,可以用來模擬傳送請求。只需要給庫方法傳入URL以及額外的引數,就可以模擬實現這個過程了。 error:異常處理模組,如果出現請求錯誤,我們可以捕獲這些異常,然後進行重試或其

解析使用(xPath)〈Python3網路爬蟲開發實戰〉

僅做記錄   XPath對網頁進行解析的過程: from lxml import etree text = ''' <div> <ul> <li class="item-0"><a href="link1.htm

python 爬蟲BeautifulSoup4 的介紹使用

有部分內容為北理嵩天老師的爬蟲教程的個人學習筆記,結合其他部落格整理學習。 前言:資訊標記形式 html是將聲音、影象、音訊嵌入到文字中,是Internet上的主要資訊組織、傳遞形式,通過預定義的標籤< >…</ >將不同型別的資訊組織起來。國際上標準的資訊標

python介面自動化-requestsrequests安裝

1.概念   requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。 2.安裝   2.1 通過pip安裝   ->開啟命令列,wind