日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫实战学习笔记_3 网络请求urllib模块:设置IP代理+处理请求异常+解析URL+解码+编码+组合URL+URL连接

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫实战学习笔记_3 网络请求urllib模块:设置IP代理+处理请求异常+解析URL+解码+编码+组合URL+URL连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 設置IP代理

1.1 方法論述

使用urllib模塊設置代理IP是比較簡單的,首先需要創建ProxyHandler對象,其參數為字典類型的代理IP,鍵名為協議類型(如HTTP或者HTTPS),值為代理鏈接。然后利用ProxyHandler對象與buildopener()方法構建一個新的opener對象,最后再發送網絡請求即可。

1.2 代碼實現

import urllib.request # 導入urllib.request模塊 url= 'https://www.httpbin.org/get' # 網絡請求地址# 創建代理IP proxy_handler = urllib.request.ProxyHandler({'https':'58.220.95.114:10053' })# 創建opener對象 opener = urllib.request.build_opener(proxy_handler) response = opener.open(url,timeout=2) # 發送網絡請求 print(response.read().decode('utf-8')) # 打印返回內容

2 處理請求異常

在實現網絡請求時,可能會出現很多異常錯誤,ulib模塊中的urllib.error模塊包含了URLError與HTTPError兩個比較重要的異常類。

2.1 處理URLError異常

URLError類中reason屬性,可以反饋異常的原因

2.1.1 向不存在的地址發送請求

import urllib.request # 導入urllib.request模塊 import urllib.error # 導入urllib.error模塊 try:# 向不存在的網絡地址發送請求response = urllib.request.urlopen('http://www.52pojie.cn/4040.html') except urllib.error.URLError as error: # 捕獲異常信息print(error.reason) # 打印異常原因print(error.code) # 打印HTTP狀態碼print(error.header) # 返回請求頭

2.1.2 雙重異常捕獲

import urllib.request # 導入urllib.request模塊 import urllib.error # 導入urllib.error模塊 try:# 向不存在的網絡地址發送請求response = urllib.request.urlopen('https://www.python12.org/',timeout=0.1) except urllib.error.HTTPError as error: # HTTPError捕獲異常信息print('狀態碼為:',error.code) # 打印狀態碼print('HTTPError異常信息為:',error.reason) # 打印異常原因print('請求頭信息如下:\n',error.headers) # 打印請求頭 except urllib.error.URLError as error: # URLError捕獲異常信息print('URLError異常信息為:',error.reason)# 輸出 URLError異常信息為: [Errno 11001] getaddrinfo failed

3 解析URL

urllib模塊中提供了parse子模塊,主要用于解析URL,可以實現URL的拆分或者是組合。它支持多種協議的URL處理。

3.1?urlparse()

3.1.1 urlparse()簡介

urlparse()用于將URL分解成不同部分

3.1.2 urlparse()函數構成

urllib.parse.urlparse (urlstring,scheme ='',allow_fragments=True)
  • urlstring:需要拆分的URL,該參數為必選參數。
  • scheme:可選參數,表示需要設置的默認協議。如果需要拆分的URL中沒有協議,可以通過該參數設置一個默認的協議,該參數的默認值為空字符串。
  • allow_fragments:可選參數,如果該參數設置為False,表示忽略fragment這部分內容,默認為Tnue。

3.1.3 使用urlparse()分解URL

import urllib.parse #導入urllib.parse模塊 parse_result = urllib.parse.urlparse('https://www.baidu.com/doc/library/urllib.parse.html') print(type(parse_result)) # 打印類型 print(parse_result) # 打印拆分后的結果 ### 也可以拆分打印 print(parse_result.scheme) # 打印拆分后的結果 print(parse_result.netloc) # 打印拆分后的結果 print(parse_result.path) # 打印拆分后的結果 print(parse_result.params) # 打印拆分后的結果 print(parse_result.query) # 打印拆分后的結果 print(parse_result.fragment) # 打印拆分后的結果

<class 'urllib.parse.ParseResult'>
ParseResult(scheme='https', netloc='www.baidu.com', path='/doc/library/urllib.parse.html', params='', query='', fragment='')
https
www.baidu.com
/doc/library/urllib.parse.html

3.2?urlsplit()

3.2.1?urlsplit()簡介

使用urlsplit()方法與urlparse()方法類似,可以實現URL的拆分,只是urlsplit()方法不再單獨拆分params這部分內容,而是將params合并到path中,所以返回的結果中只有5部分內容,并且運數據類型為SplitResult。示例代碼如下,

3.2.2?urlsplit()代碼實現

import urllib.parse #導入urllib.parse模塊 # 需要拆分的URL url = 'https://www.baidu.com/doc/library/urllib.parse.html' print(urllib.parse.urlsplit(url)) # 使用urlsplit()方法拆分URL # 輸出: SplitResult(scheme='https', netloc='www.baidu.com', path='/doc/library/urllib.parse.html', query='', fragment='') print(urllib.parse.urlparse(url)) # 使用urlparse()方法拆分URL # 輸出:ParseResult(scheme='https', netloc='www.baidu.com', path='/doc/library/urllib.parse.html', params='', query='', fragment='')

4 組合URL

4.1 urlunparse()

使用urlunpare()方法組合URL時,需要注意可迭代參數中的元素必須是6個

import urllib.parse #導入urllib.parse模塊 list_url = ['https','baidu.org','/3/library/urllib.parse.html','','',''] tuple_url = ('https','baidu.org','/3/library/urllib.parse.html','','','') dict_url = {'scheme':'https','netloc':'docs.baidu.org','path':'/baidu/library/urllib.parse.html','params':'','query':'','fragment':''} print('組合列表類型的URL:',urllib.parse.urlunparse(list_url)) print('組合元組類型的URL:',urllib.parse.urlunparse(tuple_url)) print('組合字典類型的URL:',urllib.parse.urlunparse(dict_url.values()))

輸出:

組合列表類型的URL: https://baidu.org/3/library/urllib.parse.html
組合元組類型的URL: https://baidu.org/3/library/urllib.parse.html
組合字典類型的URL: https://docs.baidu.org/baidu/library/urllib.parse.html

4.2 urlunsplit()

import urllib.parse #導入urllib.parse模塊 list_url = ['https','docs.python.org','/3/library/urllib.parse.html','',''] tuple_url = ('https','docs.python.org','/3/library/urllib.parse.html','','') dict_url = {'scheme':'https','netloc':'docs.python.org','path':'/3/library/urllib.parse.html','query':'','fragment':''} print('組合列表類型的URL:',urllib.parse.urlunsplit(list_url)) print('組合元組類型的URL:',urllib.parse.urlunsplit(tuple_url)) print('組合字典類型的URL:',urllib.parse.urlunsplit(dict_url.values()))

輸出:

組合列表類型的URL: https://docs.python.org/3/library/urllib.parse.html
組合元組類型的URL: https://docs.python.org/3/library/urllib.parse.html
組合字典類型的URL: https://docs.python.org/3/library/urllib.parse.html
?

5 URL的連接urllib.parse.urljoin()

5.1?函數原型

urllib.parse.urljoin(base,url,allow_fragments = True)
  • base:表示基礎鏈接
  • url:表示新的鏈接
  • allow_fragments:可選擇參數,默認為True

5.2 使用urllib.parse.urljoin()實例

import urllib.parse #導入urllib.parse模塊 base_url = 'https://tet.baidu.org' # 定義基礎鏈接 # 第二參數不完整時,合并返回 print(urllib.parse.urljoin(base_url,'3/library/urllib.parse.html')) # 第二參數完成時,不合并直接返回第二參數的鏈接 print(urllib.parse.urljoin(base_url,'https://docs.tet.baidu.org/3/library/urllib.parse.html#url-parsing'))

輸出:

https://tet.baidu.org/3/library/urllib.parse.html


https://docs.tet.baidu.org/3/library/urllib.parse.html#url-parsing
?

6 URL的解碼與編碼

quote()方法與urlencode()方法所實現的功能類似,但是urlencode()方法中只接收字典類型的參數,quote()方法則可以將一個字符串進行編碼。

6.1 使用urlcode()方法編碼請求參數

import urllib.parse #導入urllib.parse模塊 base_url = 'http://baidu.org/get?' # 定義基礎鏈接 params = {'name':'Jack','country':'中國','age':30} # 定義字典類型的請求參數 url = base_url+urllib.parse.urlencode(params) # 連接請求地址 print('編碼后的請求地址為:',url)

編碼后的請求地址為: http://baidu.org/get?name=Jack&country=%E4%B8%AD%E5%9B%BD&age=30

6.2 使用quote()方法編碼字符串參數

import urllib.parse #導入urllib.parse模塊 base_url = 'http://baidu.org/get?country=' # 定義基礎鏈接 url = base_url+urllib.parse.quote('中國') # 字符串編碼 print('編碼后的請求地址為:',url)

編碼后的請求地址為: http://baidu.org/get?country=%E4%B8%AD%E5%9B%BD

7 解碼

7.1 代碼1

import urllib.parse #導入urllib.parse模塊 u = urllib.parse.urlencode({'country':'中國'}) # 使用urlencode編碼 q=urllib.parse.quote('country=中國') # 使用quote編碼 print('urlencode編碼后結果為:',u) print('quote編碼后結果為:',q) print('對urlencode解碼:',urllib.parse.unquote(u)) print('對quote解碼:',urllib.parse.unquote(q))

7.2 代碼2?

import urllib.parse #導入urllib.parse模塊 # 定義一個請求地址 url = 'http://httpbin.org/get?name=Jack&country=%E4%B8%AD%E5%9B%BD&age=30' q = urllib.parse.urlsplit(url).query # 獲取需要的參數 q_dict = urllib.parse.parse_qs(q) # 將參數轉換為字典類型的數據 print('數據類型為:',type(q_dict)) print('轉換后的數據:',q_dict)

7.3 代碼3

import urllib.parse #導入urllib.parse模塊 str_params = 'name=Jack&country=%E4%B8%AD%E5%9B%BD&age=30' # 字符串參數 list_params = urllib.parse.parse_qsl(str_params) # 將字符串參數轉為元組所組成的列表 print('數據類型為:',type(list_params)) print('轉換后的數據:',list_params)

總結

以上是生活随笔為你收集整理的爬虫实战学习笔记_3 网络请求urllib模块:设置IP代理+处理请求异常+解析URL+解码+编码+组合URL+URL连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爆乳熟妇一区二区三区 | 欧美日韩在线观看一区 | 国产a级免费视频 | 国产精品免费av一区二区三区 | 丰满岳妇乱一区二区三区 | 久久久久香蕉 | 天天操操| 成人a站 | 亚洲午夜影视 | 91在线高清 | 中文字幕一区不卡 | 美女尻逼视频 | av久操| 强行糟蹋人妻hd中文字幕 | 神马久久久久久久久久久 | 91视频综合 | 亚洲美女色视频 | 永久免费不卡在线观看黄网站 | 国产久草视频 | 国产chinese中国hdxxxx | 97人妻精品一区二区三区视频 | 一女双乳被两男吸视频 | www.四虎在线观看 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 久久久三区| a在线天堂 | 久久免费黄色 | 久久久久久久黄色片 | 亚洲狼人综合 | 美女扒开尿口让男人桶 | 国产亚洲欧美一区二区 | 中文在线字幕观看 | 欧美一卡二卡在线观看 | 成人aaa视频 | 农村妇女精品一区二区 | 原来神马电影免费高清完整版动漫 | 日本激情视频在线 | 亚洲av乱码久久精品蜜桃 | 国产97超碰 | 国产精品女同 | 西川结衣在线观看 | 天天色天天射天天干 | 寡妇激情做爰呻吟 | 亚洲天堂网在线观看视频 | 亚洲阿v天堂 | 日韩日韩日韩日韩日韩 | 亚洲欧洲免费视频 | 毛片麻豆 | 密臀av在线 | 在线国产一区二区三区 | 亚洲欧洲精品一区 | 久久综合久久久久 | 亚洲乱码少妇 | 亚洲视频国产视频 | 欧美性猛交aaaa片黑人 | 天天爽夜夜 | 伊人网成人 | 啪啪免费网站 | 悠悠色综合网 | 中文在线观看免费视频 | 亚洲精品图区 | 久草视频网站 | 亚洲在线一区 | 三级黄色免费网站 | 日韩极品视频在线观看 | 葵司有码中文字幕二三区 | 久久久久久av无码免费看大片 | 极品美女开粉嫩精品 | 国产精品丝袜黑色高跟 | 九九九精品视频 | 日韩狠狠操 | 日韩欧美国产成人 | 天堂激情网 | 亚洲国产精品99久久久久久久久 | 99精品亚洲 | 久久精品国产精品亚洲毛片 | japanese在线 | 欧美日韩中文国产一区发布 | 91福利在线免费观看 | 婷婷综合精品 | 日本aaa级片 | 超碰蜜桃| 日韩精品你懂的 | 亚洲蜜桃精久久久久久久久久久久 | 污污的视频软件 | 91重口味 | 日韩成人片 | 成年人在线免费观看网站 | 99热在线看| 欧美第一页 | 海角官网 | 男同激情视频 | 亚洲狼人色 | 九九九九色 | 欧美视频免费在线观看 | 黄色日批网站 | 在线麻豆视频 | 色婷婷av一区二区三区大白胸 | 中文字幕精品一区二区三区精品 |