url編碼python3
1. url編碼問題在python中怎麼解決
最近在抓取一些js代碼產生的動態數據,需要模擬js請求獲得所需用的數據,遇到對url進行編碼和解碼的問題,就把遇到的問題總結一下,有總結才有進步,才能使學到的知識更加清晰。對url進行編碼和解碼,python提供了很方便的介面進行調用。
url中的query帶有特殊字元(不是url的保留字)時需要進行編碼。當url中帶有漢字時,需要特殊的處理才能正確編碼,以下都只針對這種情形,當然也適用於純英文字元的url。
(1) url編碼:
import urllib
url = 'wd=哈哈' #如果此網站編碼是gbk的話,需要進行解碼,從gbk解碼成unicode,再從Unicode編碼編碼為utf-8格式。
url = url.decode('gbk', 'replace')
print urllib.quote(url.encode('utf-8', 'replace'))
結果: 3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88
(2) url解碼:
import urllib
encoded_url = est.com%2fs%3fwd%3d%e5%93%88%e5%93%88'
print urllib.unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace') #反過來
函數調用的參數以及結果都是utf-8編碼的,所以在對url編碼時,需要將參數串的編碼從原始編碼轉換成utf-8,
對url解碼時,需要將解碼結果從utf-8轉換成原始編碼格式。
依據網站採用的編碼不同,或是gbk或是utf-8,賦賦予不同的編碼,進行不同的url轉碼。GBK格式,一個中文字元轉為%xx%xx,共兩組;utf-8格式,一個中文字元轉為%xx%xx%xx,共三組。
>>>importsys,urllib
>>>s='杭州'
>>>urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
%BA%BC%D6%DD
>>>urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
'%E6%9D%AD%E5%B7%9E'
a="墨西哥女孩被拐4年接客4萬次生的孩子成為人質-搜狐新聞"
printurllib.quote(urllib.quote(a))
[python]view plain
進行兩次編碼轉換後,會變為:%25E5%25A2%25A8%25E8%25A5%25BF%25E5%2593%25A5%25E5%25A5%25B3%25E5%25AD%25A9%25E8%25A2%25AB%25E6%258B%25904%25E5%25B9.................................................................................這樣的形式。
同樣需要兩次解碼後才能得到中文。
最近用python寫了個小爬蟲自動下點東西,但是url 是含中文的,而且中文似乎是 gbk 編碼然後轉成 url的。舉個例子吧,我如果有個unicode字元串「歷史上那些牛人們.pdf」,那麼我轉換成url之後是,
t="%20%E5%8E%86%E5%8F%B2%E4%B8%8A%E9%82%A3%E4%BA%9B%E7%89%9B%E4%BA%BA%E4%BB%AC.pdf",
但是對方網站給的是 s="%C0%FA%CA%B7%C9%CF%C4%C7%D0%A9%C5%A3%C8%CB%C3%C7.PDF"
>>>print urllib.unquote("%C0%FA%CA%B7%C9%CF%C4%C7%D0%A9%C5%A3%C8%CB%C3%C7.PDF").decode('gbk').encode('utf-8')
>>>歷史上那些牛人們.PDF
2. python 3.2 urllib.request請求百度首頁,得到的結果用各種編碼都是亂碼,為什麼
data不是utf8編碼的,至少第一個位元組不是合法的utf8編碼;
3. python3 代碼怎樣關閉url與ssl屬性校驗
importurllib.request
importssl
url="httpsurl"
header=headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11"
}
request=urllib.request.Request(url,headers=header)
context=ssl._create_unverified_context()#忽略ssl證書驗證
res=urllib.request.urlopen(request,context=context)
print(res.read().decode("utf8"))
4. python url編碼兩次怎麼結
面是中文的情況(比如『麗江'),url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',因此需 要做一個轉換。這里我們就用到了模塊urllib。
?
1
2
3
4
5
6
7
8
>>> import urllib
>>> data = '麗江'
>>> print data
麗江
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'
5. python3中為什麼urlparse.urljoin沒有了
python3對urllib和urllib2進行了重構,拆分成了urllib.request, urllib.response, urllib.parse, urllib.error等幾個子模塊,這樣的架構從邏輯和結構上說更加合理。
urljoin現在對應的函數是urllib.parse.urljoin
6. python3爬蟲urllib.request.urlopen("網址").read() 本來是utf-8,為什麼還要加上urlencode(「utf-8」)
你這行代碼是不需要urlencode()的。
對於返回的request對象,其read()方法獲得的其實是一個位元組流對象,而非字元串對象,所以這時需要調用該位元組流對象的decode()方法,按指定編碼方式進行解碼。
至於urlencode(),這是urllib中的一個函數,它的作用是將字元串進行url編碼。這個編碼其實就是個轉義的過程,將那些因可能造成解釋器誤會或安全問題而不適合出現在請求中的符號進行轉義,並且把超出url編碼表的字元降維。
7. python中quote函數是什麼意思,怎麼用
quote函數一般用於處理URL鏈接里的特殊字元,比如一些非ASCII列表中的字母。
位置:該函數在Python27中位於urllib模塊下,在Python3中應該是向下移動一級目錄,位於urllib.parse模塊中。
功能:替換字元串string中的一些特殊字元,並使用%xx的方式替換該特殊字元(xx為該字元的(uft-8)十六進制數值)。正常字元ascii字母a-z,數字,還有符號'_.-'是不會被替換的。當然使用函數的第二個參數(默認值為/)可以指定哪些字元也不需要替換。
例子:
>>>urllib.quote('/test')
'/test'
>>>urllib.quote('/test',safe='')
'%2Ftest'#2F為/的uft-8的hex值。
其他:函數的第一個參數為需要轉換的字元串,格式應該為str或者bytes。
函數的第三個字元為編碼方式。
8. python字元串與url編碼的轉換實例
python字元串與url編碼的轉換實例
今天小編就為大家分享一篇python字元串與url編碼的轉換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
主要應用的場景
爬蟲生成帶搜索詞語的網址
1.字元串轉為url編碼
import urllib
poet_name = "李白"
url_code_name = urllib.quote(poet_name)
print url_code_name
#輸出
#%E6%9D%8E%E7%99%BD
2.url編碼轉為字元串
import urllib
url_code_name = "%E6%9D%8E%E7%99%BD"
name = urllib.unquote(url_code_name)
print name
#輸出
#李白
以上這篇python字元串與url編碼的轉換實例就是小編分享給大家的全部內容了篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助
9. python怎麼將url的中文怎麼轉碼
先引入urllib模塊
假如我們要對下面的url進行轉碼,注意觀察各種字元的變化
使用quote方法,進行轉碼
我們看看轉碼得到的結果:
我們想要得到原先的url,可以使用quote的逆函數unquote
得到反轉碼以後的url,我們看到這種方法並沒有返回中文字元。
10. Python3 如何對url解碼
url編碼:
import urllib
url = 'http://test.com/s?wd=哈哈' #如果此網站編碼是gbk的話,需要進行解碼,從gbk解碼成unicode,再從Unicode編碼編碼為utf-8格式。
url = url.decode('gbk', 'replace')
print urllib.quote(url.encode('utf-8', 'replace'))