1. 程式人生 > >Python3 urllib庫學習

Python3 urllib庫學習

python3將python2的urllib和urllib2庫整合為一個urllib庫,由於近期用到了這個庫就參考官方文件和網上的資料總結了一下

匯入

import urllib

urllib.request

urllib.request.urlopen()

發起一個請求

response = urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) 
# url 要開啟的網址,可以是字串或者是request物件
# data 要傳送給伺服器的資料(POST方法) # timeout 網站的訪問超時時間,單位為s # cafile和capath 用於HTTPS請求中,設定CA證書及其路徑

返回物件提供的方法

  • read() , readline() ,readlines() , fileno() , close() :對HTTPResponse型別資料進行操作

  • info():返回HTTPMessage物件,表示遠端伺服器返回的頭資訊

  • getcode():返回Http狀態碼。如果是http請求,200請求成功完成;404網址未找到

  • geturl():返回請求的url

返回物件的屬性
對於HTTP 和 HTTPS請求

  • status 返回狀態碼
  • reason 返回狀態的詳細資訊

urllib.request.Request()

使用該方法來返回一個request物件

request = urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
# url 包含網址的字串
# data 要傳送給伺服器的資料物件,對於POST請求,要通過urllib.parse.urlencode() 方法進行編碼
# header 頭部資訊,必須為字典型別
# method 請求方法,如果data為None則為GET,否則為POST

頭部資訊示例

headers = {
     'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                   r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
     'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
     'Connection': 'keep-alive'
  }
  • User-Agent :這個頭部可以攜帶如下幾條資訊:瀏覽器名和版本號、作業系統名和版本號、預設語言

  • Referer:可以用來防止盜鏈,有一些網站圖片顯示來源http://*.com,就是檢查Referer來鑑定的

  • Connection:表示連線狀態,記錄Session的狀態。

也可以通過返回的request物件的 add_header(key, val) 方法來新增header資訊

request.add_header('Origin', 'https://passport.weibo.cn')
request.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
request.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')

urllib.request.ProxyHandler()

使用同一個IP去爬取同一個網站上的網頁,久了之後會被該網站伺服器遮蔽。使用代理伺服器。 (使用代理伺服器去爬取某個網站的內容的時候,在對方的網站上,顯示的不是我們真實的IP地址,而是代理伺服器的IP地址)

urllib.request.ProxyHandler(proxies=None)
data = {
        'name': 'zjw',
        'age': 23,
        'gender': 'male'
    }
proxy = request.ProxyHandler({'http': '5.22.195.215:80'})  # 設定proxy
opener = request.build_opener(proxy)  # 掛載opener
request.install_opener(opener)  # 安裝opener
data = parse.urlencode(data).encode('utf-8')
page = opener.open(url, data).read()
page = page.decode('utf-8')
return page

urllib.request.urlretrieve()

將遠端資料下載到本地,例如下載圖片

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
#返回由檔名及頭部資訊組成的元組(filename, headers)
#url 遠端資料的地址
#filename 儲存檔案的路徑,如果為空,則下載為臨時檔案
#reporthook 鉤子函式 連線伺服器成功以及每個資料塊下載完成時各呼叫一次,包含3個引數,依次為已經下載的資料塊,資料塊的大小,總檔案的大小,可用於顯示下載進度
#data post到伺服器的資料   

urllib.parse

urllib.parse.urlencode()

將包含字串或位元組內容的對映物件或二維元組序列轉換為ASCII文字字元

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)

其轉換結果用於POST操作時,還需將其編碼為位元組

data = {
    'name': 'zjw',
    'age': 23,
    'gender': 'male'
}
data = urllib.parse.urlencode(data).encode('utf-8')
#經編碼後結果為 b'name=zjw&age=23&gender=male'
#返回結果需解碼
response = request.urlopen(url, data=data).read().decode('utf-8')

urllib.parse.parse_qs()

將返回的query字串轉換為字典

urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
# 例如 {b'name':[b'zjw'],b'age':[b'23'],b'gender':[b'male']}

urllib.parse.parse_qsl()

將返回的query字串轉換為包含二維元組的列表

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
# 例如 [(b'name',b'zjw'),(b'age',b'23'),(b'gender',b'male')]

urllib.error

錯誤:

  • urllib.error.URLError

  • urllib.error.HTTPError

  • urllib.error.ContentTooShortError
    當urlretrieve()方法下載資料的大小小於實際期望值時觸發該錯誤

處理:

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

req = Request('http://www.python.org/')
try:
  response = urlopen(req)
except HTTPError as e:
  print('The (www.python.org)server could not fulfill the request.')
  print('Error code: ', e.code)
except URLError as e:
  print('We failed to reach a server.')
  print('Reason: ', e.reason)
else:
  print("good!")
  print(response.read().decode("utf8"))

相關推薦

Python3 urllib學習

python3將python2的urllib和urllib2庫整合為一個urllib庫,由於近期用到了這個庫就參考官方文件和網上的資料總結了一下 匯入 import urllib urllib.request urllib.reque

Python3 Urllib的基本使用

一、什麼是Urllib   Urllib庫是Python自帶的一個http請求庫,包含以下幾個模組: urllib.request    請求模組 urllib.error        異常處理模組 urllib.parse       url解析

Python3 Urllib

一.什麼是Urllib庫 urllib是python標準庫,就是你安裝了python,這兩個庫就已經可以直接使用了; 它包括以下模組:urllib.request 請求模組 urllib.error 異常處理模組 urllib.parse url解析模組 urllib.robotparser r

Python3 urllib和requests

1. Python3 使用urllib庫請求網路 1.1 基於urllib庫的GET請求 請求百度首頁www.baidu.com ,不新增請求頭資訊: 1 import urllib.requests 2 3 4 def get_page(): 5  

python-urllib學習筆記

import urllib.request, urllib.parse ''' urllib常用的請求語句 ''' url = '' # 傳送請求 res = urllib.request.urlopen(url=url) # 讀取請求到的內容 res.read().de

Python3 urllib

read style cookielib readlines 錯誤 處理 timeout serve 我們 urllib 簡介 urllib 基礎模塊 使用 urllib 發送請求 使用 urllib 進行身份驗證 使用 urllib 設置代理服務器 使用 u

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

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

Python3爬蟲學習筆記(1.urllib詳解)

1.什麼是爬蟲:略,到處都有講解。 雖然是入門,不過沒有Python基礎的同學看起來可能費勁,建議稍學下Python 之前學習前端知識也是為了能看懂HTML,便於爬蟲學習,建議瞭解下前端知識 2.re

urllibpython2和python3具體區別

ble log redirect proxy dmgr python3 button ner net Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve(

爬蟲學習筆記-urllib

服務器 中一 9.png tro 編碼 網頁 如果 str param urllib庫是python中一個最基本的網絡請求庫。可以模擬瀏覽器的行為,向指定的服務器發送一個請求,並可以保存服務器返回的數據。 urlopen函數:在python3的urllib庫中,所有和網絡請

python3.X版本與2.X版本裏urllib的不同

使用 學習 nco 3.x lpar lib 會有 開始 學習python 最近在學習使用python3寫爬蟲,剛開始寫很菜(上次聽到一個大佬說花了一天時間學習Python,第二天就開始做了個大的爬蟲,大佬就是大佬豈是我等小菜能比的),因為之前學了一點2版本所以現在學習使

Python爬蟲學習筆記(一)——urllib的使用

scheme param https ade 網站 dmgr nor 分享圖片 out 前言 我買了崔慶才的《Python3網絡爬蟲開發實戰》,趁著短學期,準備系統地學習下網絡爬蟲。在學習這本書的同時,通過博客摘錄並總結知識點,同時也督促自己每日學習。本書第一章是開發環境的

【Python爬蟲學習筆記2】urllib的基本使用

代理服務 cor proc 技術 origin car windows tpc -c urllib庫是python內置的實現HTTP請求的基本庫,通過它可以模擬瀏覽器的行為,向指定的服務器發送一個請求,並保存服務器返回的數據。 urlopen函數 函數原型:urlopen(

python3爬蟲之Urllib(二)

cau python err 發送請求 split 完成 構造 服務器 inf 在上一篇文章中,我們大概講了一下urllib庫中最重要的兩個請求方法:urlopen() 和 Request() 但是僅僅憑借那兩個方法無法執行一些更高級的請求,如Cookies處理,代

Python2中urllib、urllib2在Python3urllib匯入對應關係

  ◆在Python2.X中使用import urllib2——對應的,在Python3.X中會便用import urllib.request, urllib.error ◆在Python2.X中使用import urllib——對應的,在Python3.X中會使用import urllib.r

python3爬蟲(一)requests學習

前段時間利用零散時間在mooc上跟著嵩天老師學習了python爬蟲的相關知識,於是想把自己的學習經歷寫下來,對爬蟲的相關知識做一個歸納總結,文中如果有錯誤或者是不嚴謹的地方,歡迎指出和交流。 下面我們開始介紹requests庫

Python3使用urllib

1. urlopen() import urllib.request response = urllib.request.urlopen("http://www.baidu.com") urlopen(url)返回一個HTTPResponse型別的物件 pri

Python3urllib的使用

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

python3 2018分散式爬蟲教程 -3 urllib 詳解

1.urllib 庫 安裝命令: pip install urllib  urllib :Python內建的HTTP請求庫 # Python2 import urllib2 response = urllib2.urlopen('http://www.baidu.com')

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

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