国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲——URL編碼/解碼詳解

這篇具有很好參考價值的文章主要介紹了Python爬蟲——URL編碼/解碼詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

當 URL 路徑或者查詢參數(shù)中,帶有中文或者特殊字符的時候,就需要對 URL 進行編碼(采用十六進制編碼格式)。URL 編碼的原則是使用安全字符去表示那些不安全的字符。

安全字符,指的是沒有特殊用途或者特殊意義的字符。

URL基本組成

URL 是由一些簡單的組件構成,比如協(xié)議、域名、端口號、路徑和查詢字符串等,示例如下:

http://www.biancheng.net/index?param=10

路徑和查詢字符串之間使用問號?隔開。上述示例的域名為 www.biancheng.net,路徑為 index,查詢字符串為 param=1。

URL 中規(guī)定了一些具有特殊意義的字符,常被用來分隔兩個不同的 URL 組件,這些字符被稱為保留字符。例如:

  • 冒號:用于分隔協(xié)議和主機組件,斜杠用于分隔主機和路徑
  • ?:用于分隔路徑和查詢參數(shù)等。
  • =用于表示查詢參數(shù)中的鍵值對。
  • &符號用于分隔查詢多個鍵值對。
其余常用的保留字符有:/ . ... # @ $ + ; %

哪些字符需要編碼

URL 之所以需要編碼,是因為 URL 中的某些字符會引起歧義,比如 URL 查詢參數(shù)中包含了”&”或者”%”就會造成服務器解析錯誤;再比如,URL 的編碼格式采用的是 ASCII 碼而非 Unicode 格式,這表明 URL 中不允許包含任何非 ASCII 字符(比如中文),否則就會造成 URL 解析錯誤。

URL 編碼協(xié)議規(guī)定(RFC3986 協(xié)議):URL 中只允許使用 ASCII 字符集可以顯示的字符,比如英文字母、數(shù)字、和- _ . ~ ! *這 6 個特殊字符。當在 URL 中使用不屬于 ASCII 字符集的字符時,就要使用特殊的符號對該字符進行編碼,比如空格需要用%20來表示。

除了無法顯示的字符需要編碼外,還需要對 URL 中的部分保留字符不安全字符進行編碼。下面列舉了部分不安全字符:

[ ] < > " "  { } | \ ^ * · ‘ ’ 等

下面示例,查詢字符串中包含一些特殊字符,這些特殊字符不需要編碼:

http://www.biancheng.net/index?param=10!*&param1=20!-~_

下表對 URL 中部分保留字符和不安全字符進行了說明:

URL特殊字符編碼
字符 含義 十六進制值編碼
+ URL 中 + 號表示空格 %2B
空格 URL中的空格可以編碼為 + 號或者 %20 %20
/ 分隔目錄和子目錄 %2F
? 分隔實際的 URL 和參數(shù) %3F
% 指定特殊字符 %25
# 表示書簽 %23
& URL 中指定的參數(shù)間的分隔符 %26
= URL 中指定參數(shù)的值 %3D

下面簡單總結(jié)一下,哪些字符需要編碼,分為以下三種情況:

  • ASCII 表中沒有對應的可顯示字符,例如,漢字。
  • 不安全字符,包括:# ”% <> [] {} | \ ^ `?。
  • 部分保留字符,即 & / : ; = ? @ 。

Python實現(xiàn)編碼與解碼

Python 的標準庫urllib.parse模塊中提供了用來編碼和解碼的方法,分別是 urlencode() 與 unquote() 方法。

方法 說明
urlencode() 該方法實現(xiàn)了對 url 地址的編碼操作
unquote()? 該方法將編碼后的 url 地址進行還原,被稱為解碼

1) 編碼urlencode()

下面以百度搜索為例進行講解。首先打開百度首頁,在搜索框中輸入“爬蟲”,然后點擊“百度一下”。當搜索結(jié)果顯示后,此時地址欄的 URL 信息,如下所示:

https://www.baidu.com/s?wd=爬蟲&rsv_spt=1&rsv_iqid=0xa3ca348c0001a2ab&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=8&rsv_sug1=7&rsv_sug7=101

可以看出 URL 中有很多的查詢字符串,而第一個查詢字符串就是“wd=爬蟲”,其中 wd 表示查詢字符串的鍵,而“爬蟲”則代表您輸入的值。

在網(wǎng)頁地址欄中刪除多余的查詢字符串,最后顯示的 URL 如下所示:

https://www.baidu.com/s?wd=爬蟲

使用搜索修改后的 URL 進行搜索,依然會得到相同頁面。因此可知“wd”參數(shù)是百度搜索的關鍵查詢參數(shù)。下面編寫爬蟲程序?qū)?“wd=爬蟲”進行編碼,如下所示:

#導入parse模塊
from urllib import parse
#構建查詢字符串字典
query_string = {
'wd' : '爬蟲'
}
#調(diào)用parse模塊的urlencode()進行編碼
result = parse.urlencode(query_string)
#使用format函數(shù)格式化字符串,拼接url地址
url = 'http://www.baidu.com/s?{}'.format(result)
print(url)

輸出結(jié)果,如下所示:

wd=%E7%88%AC%E8%99%AB
http://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB

編碼后的 URL 地址依然可以通過地網(wǎng)頁址欄實現(xiàn)搜索功能。

除了使用 urlencode() 方法之外,也可以使用 quote(string) 方法實現(xiàn)編碼,代碼如下:

from urllib import parse
#注意url的書寫格式,和 urlencode存在不同
url = 'http://www.baidu.com/s?wd={}'
word = input('請輸入要搜索的內(nèi)容:')
#quote()只能對字符串進行編碼
query_string = parse.quote(word)
print(url.format(query_string))

輸出結(jié)果如下:

輸入:請輸入要搜索的內(nèi)容:編程幫www.biancheng.net
輸出:http://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E5%B8%AEwww.biancheng.net

注意:quote() 只能對字符串編碼,而 urlencode() 可以直接對查詢字符串字典進行編碼。因此在定義 URL 時,需要注意兩者之間的差異。方法如下:

# urllib.parse
urllib.parse.urlencode({'key':'value'}) #字典
urllib.parse.quote(string) #字符串

2) 解碼unquote(string)

解碼是對編碼后的 URL 進行還原的一種操作,示例代碼如下:

from urllib import parse
string = '%E7%88%AC%E8%99%AB'
result = parse.unquote(string)
print(result)

輸出結(jié)果:

爬蟲

3) URL地址拼接方式

最后,給大家介紹三種拼接 URL 地址的方法。除了使用 format() 函數(shù)外,還可以使用字符串相加,以及字符串占位符,總結(jié)如下:

# 1、字符串相加
  baseurl = 'http://www.baidu.com/s?'
  params='wd=%E7%88%AC%E8%99%AB'
  url = baseurl + params
# 2、字符串格式化(占位符)
  params='wd=%E7%88%AC%E8%99%AB'
  url = 'http://www.baidu.com/s?%s'% params
# 3、format()方法
  url = 'http://www.baidu.com/s?{}'
  params='wd=%E7%88%AC%E8%99%AB'
  url = url.format(params)

python教程,8天python從入門到精通,學python看這套就夠了文章來源地址http://www.zghlxwxcb.cn/news/detail-822188.html

到了這里,關于Python爬蟲——URL編碼/解碼詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java對URL進行編碼和解碼的兩種方法

    1.使用java.net.URLEncoder和java.net.URLDecoder類 上述代碼中,使用URLEncoder.encode方法將URL進行編碼,指定編碼方式為UTF-8,生成編碼后的URL字符串。使用URLDecoder.decode方法將編碼后的URL字符串進行解碼,指定解碼方式為UTF-8,生成解碼后的URL字符串。 2.使用java.nio.charset.StandardCharsets和

    2024年02月11日
    瀏覽(21)
  • SpringBoot項目整合OpenFeign、實現(xiàn)動態(tài)IP+URL請求、自定義(編碼器\解碼器)

    OpenFeign 是Spring Cloud在Feign的基礎上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態(tài)代理的方式產(chǎn)生實現(xiàn)類,實現(xiàn)類中. 啟動類加上注解: @EnableDiscoveryClient 動態(tài)URL 工具類: FeignUtils.class

    2024年02月02日
    瀏覽(28)
  • Python爬蟲入門:HTTP與URL基礎解析及簡單示例實踐

    Python爬蟲入門:HTTP與URL基礎解析及簡單示例實踐

    在數(shù)字化時代,數(shù)據(jù)已成為一種寶貴的資源。Python作為一種強大的編程語言,在數(shù)據(jù)采集和處理方面表現(xiàn)出色。爬蟲技術,即網(wǎng)絡爬蟲,是Python中用于數(shù)據(jù)采集的重要工具。本文作為Python爬蟲基礎教程的第一篇,將深入講解URL和HTTP的基礎知識,為后續(xù)的爬蟲實踐打下堅實的基

    2024年03月22日
    瀏覽(20)
  • 【Python爬蟲基礎教程 | 第一篇】URL、HTTP基礎必知必會

    【Python爬蟲基礎教程 | 第一篇】URL、HTTP基礎必知必會

    該專欄開設的目的在于給初學者提供一個學習爬蟲的成長平臺,文章涉及內(nèi)容均為必備知識。 可訂閱專欄:【Python爬蟲教程】 | CSDN秋說 在開始爬蟲的開發(fā)實戰(zhàn)前,需要了解的是URL的概念及組成結(jié)構,這具有基礎性和必要性。 URL(Uniform Resource Locator,統(tǒng)一資源定位符)是用于

    2024年03月18日
    瀏覽(21)
  • Python encode()函數(shù)詳解,Python編碼解碼

    Python encode()函數(shù)詳解,Python編碼解碼

    「作者主頁」: 士別三日wyx 「作者簡介」: CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡安全領域優(yōu)質(zhì)創(chuàng)作者 「推薦專欄」: 小白零基礎《Python入門到精通》 encode() 可以對字符串進行 「編碼」 ,常用來對 「中文」 字符串進行編碼,以解決 「亂碼」 問題。 語法 參數(shù)

    2024年02月13日
    瀏覽(25)
  • python3 爬蟲相關學習3:response= requests.get(url)的各種屬性

    python3 爬蟲相關學習3:response= requests.get(url)的各種屬性

    目錄 1? requests.get(url) 的各種屬性,也就是response的各種屬性 2 下面進行測試 2.1?response.text 1.2??response.content.decode() 1.2.1?response.content.decode() 或者??response.content.decode(\\\"utf-8\\\") 1.2.2? ?response.content.decode(\\\"GBK\\\") 報錯 1.2.3 關于編碼知識 1.3?response.url ?1.4 response.status_code 插入知識:

    2024年02月03日
    瀏覽(27)
  • 【爬蟲 | Python】解決‘Requests Max Retries Exceeded With Url‘報錯的問題

    我們在寫爬蟲的時候,經(jīng)常會遇到這樣的報錯信息: HTTPConnectionPool(host=‘xxx.xxx.com’, port=443): Max retries exceeded with url: /api/v2/oauth (Caused by NewConnectionError(’urllib3.connection.HTTPConnection object at 0x7fac5953ab70: Failed to establish a new connection: [Errno 110] Connection timed out’)) 這里有3個重要的信

    2023年04月12日
    瀏覽(20)
  • Python web實戰(zhàn)之Django URL路由詳解

    ? 技術棧:Python、Django、Web開發(fā)、URL路由 Django是一種流行的Web應用程序框架,它采用了與其他主流框架類似的URL路由機制。URL路由是指將傳入的URL請求映射到相應的視圖函數(shù)或處理程序的過程。 URL路由是Web開發(fā)中非常重要的概念,它將URL映射到特定的視圖函數(shù)。在Django中,

    2024年02月14日
    瀏覽(698)
  • URL編碼揭秘:為什么要進行URL編碼?

    URL編碼揭秘:為什么要進行URL編碼?

    URL(Uniform Resource Locator,統(tǒng)一資源定位符)是互聯(lián)網(wǎng)上資源地址的唯一標識符。在網(wǎng)絡請求和數(shù)據(jù)傳輸過程中,URL編碼起著至關重要的作用。 URL編碼解碼 | 一個覆蓋廣泛主題工具的高效在線平臺(amd794.com) https://amd794.com/urlencordec 一、URL編碼的起源與發(fā)展 URL編碼起源于1960年代

    2024年02月03日
    瀏覽(21)
  • postman如何將響應數(shù)據(jù)URL解碼處理

    postman如何將響應數(shù)據(jù)URL解碼處理

    一、postman 在Tests中輸入以下代碼,發(fā)送接口后,在Console中查看解碼后的結(jié)果; ? ?代碼如下: pm.test(\\\'urlDecode\\\',function()?{ ????var?urlDecode?=? decodeURIComponent (responseBody); ????var?jsObj?=?JSON.parse(urlDecode); ????var?str?=?JSON.stringify(jsObj,?null,?4); ????console.log(str); }?); 同樣

    2024年01月24日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包