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

Python爬蟲之urllib基礎(chǔ)用法教程

 更新時(shí)間:2019年10月12日 09:43:03   作者:ZhiHuaWei  
這篇文章主要為大家詳細(xì)介紹了Python爬蟲1.1 urllib基礎(chǔ)用法教程,用于對(duì)Python爬蟲技術(shù)進(jìn)行系列文檔講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

綜述

本系列文檔用于對(duì)Python爬蟲技術(shù)進(jìn)行簡(jiǎn)單的教程講解,鞏固自己技術(shù)知識(shí)的同時(shí),萬(wàn)一一不小心又正好對(duì)你有用那就更好了。

Python 版本是3.7.4

urllib庫(kù)介紹

它是 Python 內(nèi)置的HTTP請(qǐng)求庫(kù),也就是說(shuō)我們不需要額外安裝即可使用,它包含四個(gè)模塊(主要對(duì)前三個(gè)模塊進(jìn)行學(xué)習(xí)):

  • request : 它是最基本的 HTTP 請(qǐng)求模塊,我們可以用它來(lái)模擬發(fā)送一請(qǐng)求,就像在瀏覽器里輸入網(wǎng)址然后敲擊回車一樣,只需要給庫(kù)方法傳入 URL 還有額外的參數(shù),就可以模擬實(shí)現(xiàn)這個(gè)過程了。
  • error : 異常處理模塊,如果出現(xiàn)請(qǐng)求錯(cuò)誤,我們可以捕獲這些異常,然后進(jìn)行重試或其他操作保證程序不會(huì)意外終止。
  • parse : 用于解析URL,提供了許多URL處理方法,比如拆分、解析、合并等等的方法,以及對(duì)參數(shù)的拼接等待。
  • robotparser : 主要是用來(lái)識(shí)別網(wǎng)站的robots.txt協(xié)議文件,然后判斷網(wǎng)站的那些數(shù)據(jù)可以爬,哪些數(shù)據(jù)不可以爬的,其實(shí)用的比較少。

urllib.request 介紹

urlopen()

1.參數(shù)說(shuō)明(僅寫了四個(gè)最常用的參數(shù))

url : 爬取目標(biāo)的URL;
data : 請(qǐng)求參數(shù),如果設(shè)置該參數(shù),則請(qǐng)求默認(rèn)為post請(qǐng)求;沒有默認(rèn)為get請(qǐng)求;
timeout : 用于設(shè)置超時(shí)時(shí)間,單位為秒;
context : 必須是一個(gè)ssl.SSLContext類型,用來(lái)指定SSL設(shè)置,忽略未認(rèn)證的CA證書;

2.具體用法

GET 請(qǐng)求方式

# 導(dǎo)入urllib庫(kù)
import urllib.request
 
 # 向指定的url發(fā)送請(qǐng)求,并返回服務(wù)器響應(yīng)的類文件對(duì)象
 url = "http://www.baidu.com"
 response = urllib.request.urlopen(url=url)
 print(type(response))
 
 # 類文件對(duì)象支持文件對(duì)象的操作方法,如read()方法讀取文件全部?jī)?nèi)容,返回字符串
 html = response.read()
 # html = response.readline() # 讀取一行
 # html = response.readlines() # 讀取多行,返回列表
 # 打印響應(yīng)結(jié)果(byte類型)
 print(html)
 # 打印響應(yīng)結(jié)果(utf-8類型)
 # 二進(jìn)制和字符串之間的相互轉(zhuǎn)碼使用 encode() 和 decode() 函數(shù)
 # encode() 和 decode() 可帶參數(shù),不寫默認(rèn)utf-8,其他不再特別說(shuō)明
 print(html.decode())
 # 打印狀態(tài)碼
 # print(response.get_code())
 print(response.status)
 # 獲取響應(yīng)頭
 print(response.getheaders())
 # 獲取響應(yīng)頭Server信息
 print(response.getheader('Server'))
 # 獲取響應(yīng)結(jié)果原因
 print(response.reason)

POST 請(qǐng)求方式

# 導(dǎo)入urllib庫(kù)
import urllib.parse
import urllib.request
 
 # 向指定的url發(fā)送請(qǐng)求,并返回
 post_url = 'https://fanyi.baidu.com/sug'
 # 傳入?yún)?shù)
 form_data = {
 'kw': 'honey'
 }
 # 格式化參數(shù)
 form_data = urllib.parse.urlencode(form_data).encode()
 
 response = urllib.request.urlopen(url=post_url, data=form_data)
 # 打印服務(wù)器響應(yīng)的類文件對(duì)象
 print(type(response))
 
 # 類文件對(duì)象支持文件對(duì)象的操作方法,如read()方法讀取文件全部?jī)?nèi)容,返回字符串
 html = response.read()
 # 打印響應(yīng)結(jié)果(byte類型)
 print(html)
 # 打印響應(yīng)結(jié)果(utf-8類型)
 print(html.decode())
 # 打印狀態(tài)碼
 print(response.status)
 # print(response.getcode())
 # 獲取響應(yīng)頭
 print(response.getheaders())
 # 獲取響應(yīng)頭Server信息
 print(response.getheader('Server'))
 # 獲取響應(yīng)結(jié)果原因
 print(response.reason)

urlretrleve()

1.參數(shù)說(shuō)明

url : 下載鏈接地址;
filename : 指定保存本地路徑(如果參數(shù)未指定,urllib會(huì)生成一個(gè)臨時(shí)文件保存數(shù)據(jù));
reporthook : 是一個(gè)回調(diào)函數(shù),當(dāng)連接上服務(wù)器、以及相應(yīng)的數(shù)據(jù)塊傳輸完畢時(shí)會(huì)觸發(fā)該回調(diào),我們可以利用這個(gè)回調(diào)函數(shù)來(lái)顯示當(dāng)前的下載進(jìn)度;
data : 指post導(dǎo)服務(wù)器的數(shù)據(jù),該方法返回一個(gè)包含兩個(gè)元素的(filename, headers) 元組,filename 表示保存到本地的路徑,header表示服務(wù)器的響應(yīng)頭;

2.具體用法

# 引入所需要的庫(kù)
import os
import urllib.request
 
 
 # 定義回調(diào)函數(shù)
 def call_back(a, b, c):
 """
 圖片下載回調(diào)
 :param a: 已經(jīng)下載的數(shù)據(jù)塊
 :param b: 數(shù)據(jù)塊的大小
 :param c: 遠(yuǎn)程文件的大小
 :return: 
 """
 per = 100.0 * a * b / c
 if per > 100:
 per = 100
 print('%.2f%%' % per)
 
 
 # 定義下下載的地址
 url = 'http://www.baidu.com'
 # 構(gòu)造文件保存路徑
 path = os.path.abspath('.')
 file_path = os.path.join(path, 'baidu.html')
 # 進(jìn)行下載
 urllib.request.urlretrieve(url, file_path, call_back)

urllib.parse 介紹

urlencode()

1.參數(shù)說(shuō)明

query : url參數(shù),可以是字符串,也可以是字典;
encoding : 編碼方式;

2.具體用法

# 引入所需要的庫(kù)
import urllib.parse
# 參數(shù)數(shù)據(jù)
 data = {
 'name': '張三',
 'age': 26
 }
 # 進(jìn)行編碼
 ret = urllib.parse.urlencode(data)
 print(ret)

parse_s()

1.參數(shù)說(shuō)明

qs : url參數(shù),編碼后的字符串;
encoding : 字符方式;

2.具體用法

# 引入所需要的庫(kù)
import urllib.parse
# 參數(shù)數(shù)據(jù)
data = {
 'name': '張三',
 'age': 26
 }
 # 進(jìn)行編碼
 ret1 = urllib.parse.urlencode(data)
 print(ret1)
 # 進(jìn)行解碼
 ret2 = urllib.parse.parse_qs(ret1)
 print(ret2)

urlparse()

1.參數(shù)說(shuō)明

url : url地址字符串;

2.具體用法

# 引入所需要的庫(kù)
import urllib.parse
# 聲明url
 url = "https://www.baidu.com/s?wd=urlparse&rsv_spt=1&rsv_iqid=0x921f00fe005646ef&issp=1&f=8"
 # 進(jìn)行url解析
 ret = urllib.parse.urlparse(url)
 print(ret)
 print('scheme:', ret.scheme) # 協(xié)議
 print('netloc:', ret.netloc) # 域名服務(wù)器
 print('path:', ret.path) # 相對(duì)路徑
 print('params:', ret.params) # 路徑端參數(shù)
 print('fragment:', ret.fragment) # 片段
 print('query:', ret.query) # 查詢
 
 # urlunparse() 與 urlparse() 對(duì)應(yīng)相反函數(shù)
 # 使用urlparse的格式組合成一個(gè)url,可以直接將urlparse的返回傳遞組合
 ret1 = urllib.parse.urlunparse(ret)
 print(ret1)

urlsplit()

1.參數(shù)說(shuō)明

url : url地址字符串;

2.具體用法

# 引入所需要的庫(kù)
import urllib.parse
# 聲明url
 url = "https://www.baidu.com/s?wd=urlparse&rsv_spt=1&rsv_iqid=0x921f00fe005646ef&issp=1&f=8"
 # 進(jìn)行url解析
 ret = urllib.parse.urlsplit(url)
 print(ret)
 print('scheme:', ret.scheme) # 協(xié)議
 print('netloc:', ret.netloc) # 域名服務(wù)器
 print('path:', ret.path) # 相對(duì)路徑
 print('fragment:', ret.fragment) # 片段
 print('query:', ret.query) # 查詢
 
 # urlunsplit() 與 urlsplit() 對(duì)應(yīng)相反函數(shù)
 # 使用urlsplit的格式組合成一個(gè)url,可以直接將urlsplit的返回傳遞組合
 ret1 = urllib.parse.urlunsplit(ret)
 print(ret1)
 
 # 此函數(shù)和urlparse函數(shù)的區(qū)別在于此函數(shù)沒有params

urljoin()

1.參數(shù)說(shuō)明

qs : url參數(shù),編碼后的字符串;
encoding : 字符方式;

2.具體用法

# 引入所需要的庫(kù)
import urllib.parse
 
 # 聲明url
 url = "https://www.baidu.com/"
 # 參數(shù)數(shù)據(jù)
 data = {
 'name': '張三',
 'age': 26
 }
 # 格式化參數(shù)
 data = urllib.parse.urlencode(data)
 # 進(jìn)行url拼接
 ret = urllib.parse.urljoin(url, data)
 print(ret)

urllib.error 介紹

我們?cè)谂老x的時(shí)候發(fā)請(qǐng)求的時(shí)候難免出現(xiàn)錯(cuò)誤,如訪問不到服務(wù)器或者訪問被禁止等等,error分為URLError和HTTPError兩類:

1.URLError

沒有網(wǎng)
服務(wù)器鏈接失敗
找不大指定服務(wù)器

2.HTTPError

是URLError的子類

3.兩者區(qū)別和聯(lián)系

1).URLError封裝的錯(cuò)誤信息一般是由網(wǎng)絡(luò)引起的,包括url錯(cuò)誤
2).HTTPError封裝的錯(cuò)誤信息一般是服務(wù)器返回了錯(cuò)誤狀態(tài)碼
3).URLError是OSERROR的子類,HTTPError是URLError的子類
4).【注意】?jī)蓚€(gè)同時(shí)捕獲的時(shí)候需要將子類放在上面,父類放在下面

用法

# 引入所需要的庫(kù)
import urllib.error
import urllib.request
 
 # 一個(gè)訪問異常的url
 url = 'https://www.mz.com/156427/100'
 # 捕獲異常
 try:
 ret = urllib.request.urlopen(url)
 print(ret)
 except urllib.error.HTTPError as e:
 print(e.getcode())
 except urllib.error.URLError as e:
 print(e)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    這篇文章主要介紹了Python中pygame的mouse鼠標(biāo)事件用法,以完整實(shí)例形式詳細(xì)分析了pygame響應(yīng)鼠標(biāo)事件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 使用Python創(chuàng)建一個(gè)隨機(jī)密碼生成器

    使用Python創(chuàng)建一個(gè)隨機(jī)密碼生成器

    密碼安全是當(dāng)前數(shù)字時(shí)代的一個(gè)重要議題,在保護(hù)個(gè)人信息和賬戶安全方面,安全且可靠的密碼是至關(guān)重要的,本文將帶您逐步了解如何使用Python創(chuàng)建一個(gè)隨機(jī)密碼生成器,以生成高強(qiáng)度、難以猜測(cè)的密碼,需要的朋友可以參考下
    2024-01-01
  • 使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板(推薦)

    使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板(推薦)

    這篇文章主要介紹了使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Python實(shí)現(xiàn)Socket.IO的在線游戲場(chǎng)景方式

    Python實(shí)現(xiàn)Socket.IO的在線游戲場(chǎng)景方式

    本文介紹了Socket.IO的基本概念、應(yīng)用場(chǎng)景,并通過一個(gè)簡(jiǎn)單的多人在線實(shí)時(shí)對(duì)戰(zhàn)游戲案例,展示了如何使用Python和Socket.IO庫(kù)實(shí)現(xiàn)實(shí)時(shí)通信,Socket.IO的核心是事件驅(qū)動(dòng)模型,支持WebSocket協(xié)議,并在不支持的情況下回退到其他傳輸方式
    2025-01-01
  • python logging通過json文件配置的步驟

    python logging通過json文件配置的步驟

    這篇文章主要介紹了python logging通過json文件配置的步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-04-04
  • Python讀取excel文件中帶公式的值的實(shí)現(xiàn)

    Python讀取excel文件中帶公式的值的實(shí)現(xiàn)

    這篇文章主要介紹了Python讀取excel文件中帶公式的值的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 講解python參數(shù)和作用域的使用

    講解python參數(shù)和作用域的使用

    本文會(huì)介紹如何將語(yǔ)句組織成函數(shù),還會(huì)詳細(xì)介紹參數(shù)和作用域的概念,以及遞歸的概念及其在程序中的用途。
    2013-11-11
  • Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)人行檢測(cè)功能

    Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)人行檢測(cè)功能

    這篇文章主要介紹了Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)檢測(cè)[行人檢測(cè)],今天這里并不是說(shuō)要做出怎樣的效果,而是基于HOG+SVM來(lái)實(shí)踐機(jī)器學(xué)習(xí)檢測(cè)的流程,需要的朋友可以參考下
    2022-06-06
  • Python 爬蟲學(xué)習(xí)筆記之正則表達(dá)式

    Python 爬蟲學(xué)習(xí)筆記之正則表達(dá)式

    正則表達(dá)式是用來(lái)匹配字符串非常強(qiáng)大的工具,在其他編程語(yǔ)言中同樣有正則表達(dá)式的概念,Python同樣不例外,利用了正則表達(dá)式,我們想要從返回的頁(yè)面內(nèi)容提取出我們想要的內(nèi)容就易如反掌了。
    2016-09-09
  • jupyter的安裝與使用以及運(yùn)行卡頓問題及解決

    jupyter的安裝與使用以及運(yùn)行卡頓問題及解決

    這篇文章主要介紹了jupyter的安裝與使用以及運(yùn)行卡頓問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

浙江省| 桃江县| 齐齐哈尔市| 邻水| 贵阳市| 综艺| 绍兴县| 偏关县| 鄂州市| 泊头市| 横峰县| 师宗县| 依安县| 姚安县| 固阳县| 修武县| 花莲县| 肥西县| 巴塘县| 阳江市| 黄骅市| 依安县| 逊克县| 达州市| 沙坪坝区| 龙江县| 龙泉市| 驻马店市| 老河口市| 武威市| 高邑县| 临猗县| 玉树县| 彰化县| 沿河| 黄骅市| 静宁县| 长葛市| 台南市| 铜川市| 广元市|