中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

重拾python爬蟲之urllib的案例

發布時間:2020-11-03 11:02:44 來源:億速云 閱讀:219 作者:小新 欄目:編程語言

這篇文章主要介紹重拾python爬蟲之urllib的案例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

為網絡請求的方式有四種,按時間順序排:

第一種,urllib2 ,這個包是基于python2的,官方已經對python2停止更新了并且不再免費,我覺得這個urllib2沒必要再學習和使用

第二種,urllib  這個是python的標準庫,在python3里整合了python2的urllib和urllib2 ,有時間的可以學習一下。

第三種,urllib3,這個是第三方庫,是對第二種方式urllib的升級,做了很多改善,有時間可以學習一下。

第四種,也是很流行的requests,各種請求的方法非常的優雅和人性化,其底層是urllib3,簡化headers、proxy、cookie等的操作。這個重點學習。

作為一個爬蟲工程師,如果你連urllib一點不會就說不過去了。雖然不常用,但是學習它,有它的歷史意義,對爬蟲的整個架構有一個更透徹的了解。

一、簡介

urllib是Python中請求url連接的官方標準庫,在Python2中主要為urllib和urllib2,在Python3中整合成了urllib。基本上涵蓋了基礎的網絡請求功能。

該庫有四個模塊,分別是urllib.request,urllib.error,urllib.parse,urllib.robotparser。前三個比較常用。

urllib.request 發送http請求

urllib.error 處理請求過程中,出現的異常。

urllib.parse 解析url

urllib.robotparser 解析robots.txt 文件

二、請求方式

1、get請求

#第一步導包
from  urllib import request

url = "http://httpbin.org"
#第二步請求
response = request.urlopen(url,timeout=1)
#第三步打印返回數據
print(response.read().decode())

訪問的結果會是一個http.client.HTTPResponse對象,使用此對象的read()方法,則可以獲取訪問網頁獲得的數據。但是要注意的是,獲得的數據會是bytes的二進制格式,所以需要decode()一下,轉換成字符串格式。

urllib發送請求是用urlopen()

源碼如下

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

第一個參數 String 類型的地址

data 是 bytes 類型的內容,可通過 bytes()函數或者encode()轉為化字節流。它也是可選參數。使用 data 參數,請求方式變成以 POST 方式提交表單。使用標準格式是application/x-www-form-urlencoded

timeout 參數是用于設置請求超時時間。單位是秒。

cafile和capath代表 CA 證書和 CA 證書的路徑。如果使用HTTPS則需要用到。

context參數必須是ssl.SSLContext類型,用來指定SSL設置

cadefault參數已經被棄用,可以不用管了。

該方法也可以單獨傳入urllib.request.Request對象

該函數返回結果是一個http.client.HTTPResponse對象。

http.client.HTTPResponse對象。它具有msg、version、status、reason、debuglevel、closed等屬性以及read()、readinto()、getheader(name)、getheaders()、fileno()等函數。

# print(response.msg) # OK
# print(response.version)  #11
# print(response.status) #200
# print(response.reason) #OK
# print(response.getcode()) #200
# print(response.getheaders) # <bound method HTTPResponse.getheaders of <http.client.HTTPResponse 
object at 0x0000023C554DB588>>
# print(response.geturl()) #http://httpbin.org/headers

2、post請求

from  urllib import request,parse

url = "http://httpbin.org"data = {    'name':'xfy'}# data = bytes(parse.urlencode(data),encoding='utf8');
data = parse.urlencode(data).encode()
response = request.urlopen(url+"/post",data=data)
print(response.status) #200print(response.read().decode())

data 需要被轉碼成字節流。而data 是一個字典。我們需要使用 parse.urlencode() 將字典轉化為字符串。再使用 bytes()或者encode() 轉為字節流。最后使用 urlopen() 發起請求,請求是模擬用 POST 方式提交表單數據。

這里說一下http://httpbin.org,這個url專門是用來爬蟲請求測試的。

http://httpbin.org/get   測試get請求
http://httpbin.org/post  測試post請求
http://httpbin.org/headers  測試獲得headers  
http://httpbin.org/ip  測試獲得ip
http://httpbin.org/cookies  測試獲得cookies

三、創建 Request 對象

urlopen()還可以傳一個Request對象

req = request.Request(url+"/get")
response = request.urlopen(req)
print(response.read().decode())

urllib/request 包下有一個類Request

其初始化方法如下

def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

url 參數是請求鏈接,這個是必傳參數,其他的都是可選參數。

data 參數跟 urlopen() 中的 data 參數用法相同。

headers 參數是指定發起的 HTTP 請求的頭部信息。headers 是一個字典。它除了在 Request 中添加,還可以通過調用 Reques t實例的 add_header() 方法來添加請求頭。

origin_req_host 參數指的是請求方的 host 名稱或者 IP 地址。

unverifiable 參數表示這個請求是否是無法驗證的,默認值是False。意思就是說用戶沒有足夠權限來選擇接收這個請求的結果。例如我們請求一個HTML文檔中的圖片,但是我們沒有自動抓取圖像的權限,我們就要將 unverifiable 的值設置成 True。

method 參數指的是發起的 HTTP 請求的方式,有 GET、POST、DELETE、PUT等

以上是重拾python爬蟲之urllib的案例的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绵阳市| 同仁县| 铜梁县| 包头市| 浦县| 贺兰县| 五台县| 读书| 凤翔县| 晋宁县| 资阳市| 连州市| 龙游县| 额尔古纳市| 灯塔市| 黄骅市| 德昌县| 富锦市| 申扎县| 登封市| 马龙县| 新蔡县| 临夏县| 长泰县| 桑日县| 永胜县| 昭苏县| 博客| 伊金霍洛旗| 册亨县| 华蓥市| 筠连县| 益阳市| 徐汇区| 庄河市| 讷河市| 顺平县| 南开区| 乌恰县| 广水市| 廊坊市|