最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?urllib?入門(mén)使用詳細(xì)教程

 更新時(shí)間:2022年11月15日 16:35:36   作者:卡爾特斯  
urllib?庫(kù),它是?Python?內(nèi)置的?HTTP?請(qǐng)求庫(kù),不需要額外安裝即可使用,這篇文章主要介紹了Python?urllib?入門(mén)使用,需要的朋友可以參考下

一、簡(jiǎn)介

urllib 庫(kù),它是 Python 內(nèi)置的 HTTP 請(qǐng)求庫(kù),不需要額外安裝即可使用,它包含四個(gè)模塊:

`request` 請(qǐng)求模塊,提供最基本的 `HTTP` 請(qǐng)求處理。
`parse` 工具模塊,提供處理 `url` 的很多方法:拆分、解析、合并等等。
`error` 異常處理模塊,如果出現(xiàn)請(qǐng)求錯(cuò)誤,可以捕獲這些錯(cuò)誤,保證程序不會(huì)意外終止。
`robotparser` 模塊,主要用來(lái)識(shí)別網(wǎng)站的 `robots.txt` 文件,判斷哪些網(wǎng)站可以爬取,用的比較少。

二、 request 模塊

1、urlopen:打開(kāi)一個(gè)指定 URL,然后使用 read() 獲取網(wǎng)頁(yè)的 HTML 實(shí)體代碼。

# 使用 urllib
import urllib.request

# 1、定義一個(gè) url
url = 'http://www.baidu.com'

# 2、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(url)

# 3、獲取響應(yīng)數(shù)據(jù)中的頁(yè)面源碼(注意:read() 返回的是字節(jié)形式的二進(jìn)制數(shù)據(jù),返回?cái)?shù)據(jù)會(huì)被 b'xxx' 進(jìn)行包裹)
content = response.read()

# 4、輸出二進(jìn)制數(shù)據(jù) content
print(content)
# 輸出結(jié)果:b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>'

# 5、將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成字符串,這里需要網(wǎng)頁(yè)對(duì)應(yīng)的編碼格式(例如:<meta http-equiv="Content-Type" content="text/html;charset=utf-8">),charset= 的就是編碼格式 utf-8
content = content.decode('utf-8')

# 6、輸出字符串 content
print(content)

2、response:響應(yīng)的數(shù)據(jù)對(duì)象 HTTPResponse 類型

# 使用 urllib
import urllib.request

# 1、定義一個(gè) url
url = 'http://www.baidu.com'

# 2、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(url)

# response 是 http.client.HTTPResponse 類型
print(type(response))

# read 方法是按照一個(gè)字節(jié)一個(gè)字節(jié)的去讀取內(nèi)容
content = response.read()
print(content)

# read 方法可以指定讀取多少個(gè)字節(jié)
content = response.read(50)
print(content)

# 讀取一行
content = response.readline()
print(content)

# 讀取所有行
content = response.readlines()
print(content)

# 獲取狀態(tài)碼
print(response.getcode())

# 獲取訪問(wèn)的鏈接地址
print(response.geturl())

# 獲取 headers
print(response.getheaders())

3、Request:自定義請(qǐng)求對(duì)象

# 使用 urllib
import urllib.request

# url 的組成
# https://www.baidu.com/s?wd=123

# 協(xié)議         主機(jī)               端口號(hào)    路徑   參數(shù)   錨點(diǎn)
# http/https   www.baidu.com      80      s     wd     #
# http                            80
# https                           443
# mysql                           3306
# oracle                          1521
# redis                           6379
# mongdb                          27017

# 1、定義一個(gè) https 的 url
url = 'https://www.baidu.com'

# 2、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(url)

# 3、獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 4 會(huì)發(fā)現(xiàn)直接這么拿回來(lái)的數(shù)據(jù)不完整,這就是反扒的其中一種,代表給到服務(wù)器識(shí)別的信息不完整,比如 header 頭里面的請(qǐng)求信息缺少。
print(content)

# 解決方式:

# 定義 header
headers = {
  # UA 最基本的防爬識(shí)別
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 1、定義一個(gè) https 的 url
url = 'https://www.baidu.com'

# 2、定義一個(gè) Request 對(duì)象,urlopen 方法并不能直接帶 header。
# 細(xì)節(jié):為什么這里需要寫(xiě) url=url 而有的地方不需要?因?yàn)?Request 構(gòu)造方法傳參順序問(wèn)題 Request(url, data=None, headers={} ...)
request = urllib.request.Request(url=url, headers=headers)

# 3、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 3、獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 4 輸出
print(content)

4、urlretrieve:下載(例如:圖片、視頻、網(wǎng)頁(yè)源碼…)

# 使用 urllib
import urllib.request

# 下載網(wǎng)頁(yè)
url = 'http://www.baidu.com'

# 參數(shù)1:頁(yè)面地址,參數(shù)2:文件名稱(或路徑與名稱,例如:./test/baidu.html、baidu.html,不指定路徑默認(rèn)當(dāng)前)
urllib.request.urlretrieve(url, 'baidu.html')


# 下載圖片
url = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F8%2F55402f62682e3.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1670904201&t=2dc001fbd959432efe8b8ee0792589ba'

# 參數(shù)1:頁(yè)面地址,參數(shù)2:文件名稱(或路徑與名稱,例如:./test/baidu.html、baidu.html,不指定路徑默認(rèn)當(dāng)前)
urllib.request.urlretrieve(url, 'dzm.jpg')

二、 parse 模塊

1、quote:(GET)參數(shù)進(jìn)行 unicode 編碼

quote 會(huì)對(duì)參數(shù)進(jìn)行 unicode 編碼,但是得一個(gè)一個(gè)參數(shù)的進(jìn)行轉(zhuǎn)換,在進(jìn)行拼接,在多個(gè)參數(shù)時(shí)使用起來(lái)比較麻煩。

# 使用 urllib
import urllib.request

# 定義 header
headers = {
  # UA 最基本的防爬識(shí)別
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 1、定義一個(gè) https 的 url

# 這種中文寫(xiě)法會(huì)報(bào)錯(cuò),因?yàn)?ascii 檢索不到
# url = 'https://www.baidu.com/s?wd=卡爾特斯CSDN'

# 也就是需要 `卡爾特斯CSDN` 變成 unicode 編碼格式,例如這樣:
# url = 'https://www.baidu.com/s?wd=%E5%8D%A1%E5%B0%94%E7%89%B9%E6%96%AFCSDN'

# 準(zhǔn)備基礎(chǔ)地址(不能整個(gè)鏈接去進(jìn)行 quote 轉(zhuǎn)換)(GET)
url = 'https://www.baidu.com/s?wd='

# 通過(guò) urllib.parse.quote() 進(jìn)行轉(zhuǎn)換
wd = urllib.parse.quote('卡爾特斯CSDN')
# print(wd) # %E5%8D%A1%E5%B0%94%E7%89%B9%E6%96%AFCSDN

# 拼接起來(lái)
url = url + wd

# 2、定義一個(gè) Request 對(duì)象,urlopen 方法并不能直接帶 header。
# 細(xì)節(jié):為什么這里需要寫(xiě) url=url 而有的地方不需要?因?yàn)?Request 構(gòu)造方法傳參順序問(wèn)題 Request(url, data=None, headers={} ...)
request = urllib.request.Request(url=url, headers=headers)

# 3、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 3、獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 4 輸出
print(content)

2、urlencode:(GET)參數(shù)進(jìn)行 unicode 編碼

urlencode 會(huì)對(duì)多個(gè)參數(shù)進(jìn)行 unicode 編碼。

# 使用 urllib
import urllib.request

# 定義 header
headers = {
  # UA 最基本的防爬識(shí)別
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 1、定義一個(gè) https 的 url

# 這種中文寫(xiě)法會(huì)報(bào)錯(cuò),因?yàn)?ascii 檢索不到
# url = 'https://www.baidu.com/s?wd=卡爾特斯CSDN&sex=男'

# 也就是需要 `卡爾特斯CSDN` 與 `男` 變成 unicode 編碼格式,例如這樣:
# url = 'https://www.baidu.com/s?wd=%E5%8D%A1%E5%B0%94%E7%89%B9%E6%96%AFCSDN&sex=%E7%94%B7'

# 準(zhǔn)備基礎(chǔ)地址(不能整個(gè)鏈接去進(jìn)行 quote 轉(zhuǎn)換)(GET)
url = 'https://www.baidu.com/s?'

# 參數(shù)
params = {
  'wd': '卡爾特斯CSDN',
  'sex': '男'
}

# 通過(guò) urllib.parse.urlencode() 進(jìn)行轉(zhuǎn)換(多個(gè)參數(shù))
str = urllib.parse.urlencode(params)
# print(str) # wd=%E5%8D%A1%E5%B0%94%E7%89%B9%E6%96%AFCSDN&sex=%E7%94%B7

# 通過(guò) urllib.parse.quote() 進(jìn)行轉(zhuǎn)換(單個(gè)參數(shù))
# wd = urllib.parse.urlencode('卡爾特斯CSDN')
# print(wd) # %E5%8D%A1%E5%B0%94%E7%89%B9%E6%96%AFCSDN

# 拼接起來(lái)
url = url + str

# 2、定義一個(gè) Request 對(duì)象,urlopen 方法并不能直接帶 header。
# 細(xì)節(jié):為什么這里需要寫(xiě) url=url 而有的地方不需要?因?yàn)?Request 構(gòu)造方法傳參順序問(wèn)題 Request(url, data=None, headers={} ...)
request = urllib.request.Request(url=url, headers=headers)

# 3、模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 3、獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 4 輸出
print(content)

2、urlencode:(POST)參數(shù)進(jìn)行 unicode 編碼,附:Python爬蟲(chóng)Xpath定位數(shù)據(jù)的兩種方法

# 使用 urllib
import urllib.request
# 使用 json
import json

# 定義 header
headers = {
  # UA 最基本的防爬識(shí)別
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 請(qǐng)求地址(POST)
url = 'https://fanyi.baidu.com/sug'

# 參數(shù)
params = {
  'kw': '名稱'
}

# post 請(qǐng)求,參數(shù)不能進(jìn)行拼接,需放到請(qǐng)求對(duì)象指定的參數(shù)對(duì)象中

# 通過(guò) urllib.parse.urlencode() 進(jìn)行轉(zhuǎn)換(多個(gè)參數(shù))
# str = urllib.parse.urlencode(params)
# 直接使用轉(zhuǎn)換的參數(shù)字符串會(huì)報(bào)錯(cuò):POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
# request = urllib.request.Request(url=url, data=str, headers=headers)

# 上面直接使用參數(shù)字符串會(huì)報(bào)錯(cuò),是因?yàn)?post 請(qǐng)求參數(shù)必須要要進(jìn)行編碼,指定編碼格式
data = urllib.parse.urlencode(params).encode('utf-8')
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
request = urllib.request.Request(url=url, data=data, headers=headers)

# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 將字符串轉(zhuǎn)成 json
obj = json.loads(content)

# 輸出 json
print(obj)

三、 error 模塊(URLError 與 HTTPError)

1、HTTPError 類是 URLError 類的子類。

2、導(dǎo)入包分別是:urllib.error.URLError、urllib.error.HTTPError。

3、通過(guò) urllib 發(fā)送請(qǐng)求的時(shí)候,有可能發(fā)送失敗,可以通過(guò) try-except 進(jìn)行異常捕獲,異常有兩類:URLErrorHTTPError 類。

# 使用 urllib
import urllib.request
# 使用 json
import json

# 定義 header
headers = {
  # UA 最基本的防爬識(shí)別
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 請(qǐng)求地址(POST)
url = 'https://fanyi.baidu.com/sug'

# 參數(shù)
params = {
  'kw': '名稱'
}

# post 請(qǐng)求,參數(shù)不能進(jìn)行拼接,需放到請(qǐng)求對(duì)象指定的參數(shù)對(duì)象中

# 通過(guò) urllib.parse.urlencode() 進(jìn)行轉(zhuǎn)換(多個(gè)參數(shù))
# str = urllib.parse.urlencode(params)
# 直接使用轉(zhuǎn)換的參數(shù)字符串會(huì)報(bào)錯(cuò):POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
# request = urllib.request.Request(url=url, data=str, headers=headers)

# 上面直接使用參數(shù)字符串會(huì)報(bào)錯(cuò),是因?yàn)?post 請(qǐng)求參數(shù)必須要要進(jìn)行編碼,指定編碼格式
data = urllib.parse.urlencode(params).encode('utf-8')
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
request = urllib.request.Request(url=url, data=data, headers=headers)

# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 獲取內(nèi)容字符串
content = response.read().decode('utf-8')

# 將字符串轉(zhuǎn)成 json
obj = json.loads(content)

# 輸出 json
print(obj)

四、Handler 處理器(IP 代理)

五、xppath 使用

到此這篇關(guān)于Python urllib 入門(mén)使用詳細(xì)教程的文章就介紹到這了,更多相關(guān)Python urllib使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 使用建議與技巧分享(四)

    python 使用建議與技巧分享(四)

    這篇文章主要介紹了python的一些使用建議與技巧分享,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • 一篇文章帶你學(xué)習(xí)Python3的高級(jí)特性(1)

    一篇文章帶你學(xué)習(xí)Python3的高級(jí)特性(1)

    這篇文章主要為大家詳細(xì)介紹了Python3的高階函數(shù),主要介紹什么是高級(jí)特性,高級(jí)特性的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python簡(jiǎn)潔強(qiáng)大的ORM框架Peewee的用法詳解

    Python簡(jiǎn)潔強(qiáng)大的ORM框架Peewee的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Peewee,它作為一款簡(jiǎn)潔且功能強(qiáng)大的?ORM(對(duì)象關(guān)系映射)框架,為開(kāi)發(fā)者提供了高效便捷的數(shù)據(jù)庫(kù)交互方式,下面我們來(lái)看看它的具體使用吧
    2025-01-01
  • 實(shí)例詳解Python模塊decimal

    實(shí)例詳解Python模塊decimal

    這篇文章主要介紹了Python模塊decimal ,Python提供了decimal模塊用于十進(jìn)制數(shù)學(xué)計(jì)算,它具有以下特點(diǎn)在文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-06-06
  • Python高階函數(shù)與裝飾器函數(shù)的深入講解

    Python高階函數(shù)與裝飾器函數(shù)的深入講解

    這篇文章主要給大家介紹了關(guān)于Python高階函數(shù)與裝飾器函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python logging模塊寫(xiě)入中文出現(xiàn)亂碼

    Python logging模塊寫(xiě)入中文出現(xiàn)亂碼

    這篇文章主要介紹了Python logging模塊寫(xiě)入中文出現(xiàn)亂碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 如何利用Matlab制作一款真正的拼圖小游戲

    如何利用Matlab制作一款真正的拼圖小游戲

    這篇文章主要給大家介紹了關(guān)于如何利用Matlab制作一款真正的拼圖小游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python+Delorean實(shí)現(xiàn)時(shí)間格式智能轉(zhuǎn)換

    Python+Delorean實(shí)現(xiàn)時(shí)間格式智能轉(zhuǎn)換

    DeLorean是一個(gè)Python的第三方模塊,基于?pytz?和?dateutil?開(kāi)發(fā),用于處理Python中日期時(shí)間的格式轉(zhuǎn)換。本文將詳細(xì)講講DeLorean的使用,感興趣的可以了解一下
    2022-04-04
  • Python中八大圖像特效算法的示例詳解

    Python中八大圖像特效算法的示例詳解

    圖像特效處理是基于圖像像素?cái)?shù)據(jù)特征,將原圖像進(jìn)行一定步驟的計(jì)算——例如像素作差、灰度變換、顏色通道融合等,從而達(dá)到期望的效果。本文將為大家介紹八種常用的圖像特效算法,需要的可以參考一下
    2022-03-03
  • Python+tkinter實(shí)現(xiàn)一個(gè)繪圖風(fēng)格控件

    Python+tkinter實(shí)現(xiàn)一個(gè)繪圖風(fēng)格控件

    這篇文章主要為大家詳細(xì)介紹了Python如何利用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的繪圖風(fēng)格控件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-09-09

最新評(píng)論

小金县| 林周县| 磐石市| 铁岭市| 新乡县| 巴青县| 尚志市| 介休市| 石台县| 高邑县| 遂川县| 凯里市| 察雅县| 达拉特旗| 泰来县| 濉溪县| 大理市| 绥德县| 集贤县| 根河市| 萝北县| 临西县| 临漳县| 铜陵市| 保定市| 雅江县| 叙永县| 都昌县| 大化| 弥渡县| 方正县| 白朗县| 广水市| 湘乡市| 大厂| 桐柏县| 波密县| 荆门市| 富裕县| 丹巴县| 陇川县|