python對url編碼
『壹』 python爬蟲前奏
在瀏覽器中發送http請求的過程:
1.當用戶在瀏覽器地址欄輸入URL並按回車鍵時,瀏覽器會向HTTP伺服器發送HTTP請求。HTTP請求主要分為「獲取」和「發布」兩種方法。
2.當我們輸入網址htp://www網路。com在瀏覽器中,瀏覽器發送Request請求獲取HTP/www Bai.com的html文件,伺服器將Response文件對象發回瀏覽器。
3.瀏覽器分析響應中的HTML,發現它引用了很多其他文件,比如Images文件、CSS文件、JS文件。瀏覽器會自動再次發送一個獲取圖片、CSS文件或JS文件的請求。
4.當所有文件下載成功後,網頁將完全按照HTML語法結構顯示。
#url解釋:
URL是統一資源定位符的縮寫,統一資源定位符。
網址由以下部分組成:
scheme://host:port/path/> query-string = XXX # ancho
方案:表示訪問的協議,如http或https、ftp等。
主機:主機名、域名,如www..com。
埠:埠號。當您訪問網站時,瀏覽器默認使用埠80。
路徑:找到路徑。例如,在www.jianshu.com/trending/now,,以下趨勢/現在是路徑。
查詢字元串:查詢字元串,如www..com/s?. Wd=python,後跟Wd = python,是搜索字元串。
錨點:錨點,背景一般忽略,前端用於頁面定位。
瀏覽器中的一個ufl,瀏覽器將對這個url進行編碼。除了英文字母、數字和一些符號之外,所有其他符號都用百分號加上十六進制代碼值進行編碼。
#請求頭通用參數:
在http協議中,當向伺服器發送請求時,數據被分成三部分。第一個是把數據放在url中,第二個是把數據放在正文中(在post請求中),第三個是把數據放在頭部。這里,我們介紹一些經常在網路爬蟲中使用的請求頭參數:
用戶代理:瀏覽器名稱。這通常用於網路爬蟲。當請求網頁時,伺服器可以通過這個參數知道哪個瀏覽器發送了請求。如果我們通過爬蟲發送請求,那麼我們的用戶代理就是Python。對於那些有反爬蟲機制的網站,很容易判斷你的請求是爬蟲。因此,我們應該始終將此值設置為某些瀏覽器的值,以偽裝我們的爬蟲。
引用者:指示當前請求來自哪個網址。這也可以作為反爬蟲技術。如果不是來自指定頁面,則不會做出相關響應。
http協議是無狀態的。也就是說,同一個人發送了兩個請求,伺服器無法知道這兩個請求是否來自同一個人。因此,此時使用cookie進行標識。一般來說,如果你想成為一個登錄後才能訪問的網站,你需要發送cookie信息。
常見的請求方法有:
在Http協議中,定義了八種請求方法。這里介紹兩種常見的請求方法,即get請求和post請求。
Get request:一般來說,get request只在從伺服器獲取數據時使用,不會對伺服器資源產生任何影響。
發布請求:發送數據(登錄)、上傳文件等。,並在會影響伺服器資源時使用post請求。
這是網站開發中常用的兩種方法。並且一般會遵循使用原則。然而,為了成為一個反爬蟲機制,一些網站和伺服器經常出於常識玩牌。應該使用get方法的請求可能必須更改為post請求,這取決於具體情況。
常見響應狀態代碼:
00:請求正常,伺服器正常最近數據。
31:永久重定向。例如,當您訪問www.jingdong.com時,您將被重定向到www.jd.com。
32:臨時重定向。例如,當訪問需要登錄的頁面時,此時沒有登錄,您將被重定向到登錄頁面。
400:在伺服器上找不到請求的網址。換句話說,盾請求ur1錯誤。
403:伺服器拒絕訪問,許可權不足。
50:伺服器內部錯誤。可能是伺服器有bug。
『貳』 python 無法轉url 編碼怎麼解決
今天要處理網路貼吧的東西。想要做一個關鍵詞的list,每次需要時,直接添加 到list裡面就可以了。但是添加到list裡面是中文的情況(比如『麗江』),url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',因此需 要做一個轉換。這里我們就用到了模塊urllib。
>>> import urllib
>>> data = '麗江'
>>> print data
麗江
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>>urllib.quote(data)
'%E4%B8%BD%E6%B1%9F'
那我們想轉回去呢?
>>> urllib.unquote('%E4%B8%BD%E6%B1%9F')
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>> printurllib.unquote('%E4%B8%BD%E6%B1%9F')
麗江
細心的同學會發現貼吧url中出現的是%C0%F6%BD%AD,而非'%E4%B8%BD%E6%B1%9F',其實是編碼問題。網路的是gbk,其他的一般網站比如google就是utf8的。所以可以用下列語句實現。
>>> import sys,urllib
>>> s = '麗江'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
'%C0%F6%BD%AD'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
'%E4%B8%BD%E6%B1%9F'
>>>
另一個方法
#!/usr/bin/python
import urllib
import sys
string = sys.argv[1]
string = unicode(string,"gbk")
utf8_string = string.encode("utf-8")
gbk_string=string.encode("gbk")
gbk=urllib.quote(gbk_string)
utf8=urllib.quote(utf8_string)
print gbk
print utf8
『叄』 網頁編碼和Python編碼不匹配怎麼辦
網頁編碼格式有很多,比如UTF-8,GBK2312等,在網址頁面F12鍵,ctrl+f搜索charset可看到該網頁使用的編碼格式,如CSDN為charset=」utf-8」。我們使用python獲取網頁內容時,經常會由於網頁編碼問題導致程序崩潰報錯或獲取到一堆二進制內容,軟體的兼容性很差。有一個辦法,可以通過第三方庫chardet獲取編碼格式,再使用該編碼格式解碼數據可實現兼容。
1、安裝chardet庫
chardet是第三方庫,需要先安裝再使用。簡單的辦法是啟動DOS界面,進入python安裝路徑下Scripts路徑中(其中有pip腳本),運行」pip install chardet」,即可完成安裝(可能需要先更新pip,根據提示運行命令即可);
2、導入charset、建立函數
python工程中導入charset庫(」import chardet」);建立函數如下:
def get_url_context(url):
content = urllib.request.urlopen(url) #獲取網頁內容
encode = chardet.detect(content) #獲取網頁編碼格式字典信息,字典encode中鍵encoding的值為編碼格式
return content.decode(encode['encoding'], 'ignore') #根據獲取到的編碼格式進行解碼,並忽略不能識別的編碼信息
以上函數的返回值即為網頁解碼後的內容,無論網頁是哪種格式編碼,都能輕松識別轉換;需要注意的是解碼時要加參數』ignore』,否則網頁中可能會有混合編碼導致程序出錯。
『肆』 python中url太長怎麼解決
今天寫了個腳本 主要就是實現利用sqlInj點直接把數據獲取到本地並存到Mysql資料庫中
學過Python的都知道可以使用urllib2中的request()方法直接打開Url,但僅限於url後沒有跟復雜的參數串
今天我利用的Url是
' and (select top 1 cast(CONTENT as varchar(8000)) from xxx.dbo.xxx where cast(CONTENT as varchar) not in (select top 22 cast(CONTENT as varchar) from xxx.dbo.xxx))=0--
開始我也直接用以下語句測試的:
url="上面的URL"
req=urllib2.Request(url)
urllib2.urlopen(req)
可是執行後一直提示500錯誤,由此可以發現應該是Python在對Url進行編碼的時候更改了某些特殊字元造成Url失效
我們可以用urllib2或urllib的quote()方法控制對特殊字元的URL編碼,這里推薦用 urllib下的quote_plus()方法,它將空格轉化成'+'而非%20通用性更好。
我們更改後的代碼如下:
url = "' and (select top 1 cast(CONTENT as varchar(8000)) from xxx.dbo.xxx where cast(CONTENT as varchar) not in (select top "+str(count)+" cast(CONTENT as varchar) from xxx.dbo.xxx))=0--"
quoteUrl=urllib.quote_plus(url,safe=':\'/?&=()')
fd = urllib.urlopen(quoteUrl)
這樣我們就可以正常的提取數據了
『伍』 python 爬取到的url怎麼轉碼
先引入urllib模塊
假如我們要對下面的url進行轉碼,注意觀察各種字元的變化
使用quote方法,進行轉碼
我們看看轉碼得到的結果:
我們想要得到原先的url,可以使用quote的逆函數unquote
得到反轉碼以後的url,我們看到這種方法並沒有返回中文字元。
『陸』 python怎麼將url的中文怎麼轉碼
先引入urllib模塊
假如我們要對下面的url進行轉碼,注意觀察各種字元的變化
使用quote方法,進行轉碼
我們看看轉碼得到的結果:
我們想要得到原先的url,可以使用quote的逆函數unquote
得到反轉碼以後的url,我們看到這種方法並沒有返回中文字元。
『柒』 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編碼的轉換實例就是小編分享給大家的全部內容了篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助
『捌』 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'))
『玖』 python3爬蟲urllib.request.urlopen("網址").read() 本來是utf-8,為什麼還要加上urlencode(「utf-8」)
你這行代碼是不需要urlencode()的。
對於返回的request對象,其read()方法獲得的其實是一個位元組流對象,而非字元串對象,所以這時需要調用該位元組流對象的decode()方法,按指定編碼方式進行解碼。
至於urlencode(),這是urllib中的一個函數,它的作用是將字元串進行url編碼。這個編碼其實就是個轉義的過程,將那些因可能造成解釋器誤會或安全問題而不適合出現在請求中的符號進行轉義,並且把超出url編碼表的字元降維。
『拾』 如何在python%的編碼URL參數
面是中文的情況(比如『麗江'),url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',因此需要做一個轉換。這里我們就用到了模塊urllib。?12345678>>>importurllib>>>data='麗江'>>>printdata麗江>>>data'\xe4\xb8\xbd\xe6\xb1\x9f'