byte轉stringpython
『壹』 爬蟲"搜狗微信公眾號"遇到的一些問題——Requests 解析html gzip壓縮
一直都覺得微信公眾號是爬蟲的理想對象,獲取到的對象url在手機上展示非常的贊,廣告排版都在能接受的范圍內,正好最近2練手python爬蟲,果斷的上了。
首先分析一下搜狗微信公眾號的手機端:
這里的請求非常簡單 分析之後可以發現基本就是:
url='http://weixin.sogou.com/wapindex/wap/0612/wap_9/%d.html'%i
變換的也就是後面的數字
然後正常使用requests去請求:
response=requests.get(url,headers=mergedHeaders)
然後就亂碼了,這里我嘗試了很多解碼方式,但是都解決不了,當然最後折騰了好久之後發現是html的gzip壓縮問題,在網路上查詢基本都是urllib2的解決辦法
重新查詢requests的官方文檔發現了我需要的:
很明顯,這里說了使用response.content方法
Requests會自動解碼gzip,不過返回的是byte內容,所以我們只需要將byte to String 就可以了,好,嘗試一下
轉換方法:
def byteToString(byteData):
'''
將byte轉化為String
:parambyteData:
:return: String
'''
returnBytesIO(byteData).read().decode()
然後請求內容:
response=requests.get(url,headers=mergedHeaders)
ifresponse.headers['Content-Encoding']=='gzip':
result=BytesIO(response.content).read().decode()
returnresult
else:
returnresponse.text
問題解決
『貳』 python byte 轉換為 string
int(x[,base])將x轉換為一個整數
long(x[,base])將x轉換為一個長整數
float(x)將x轉換到一個浮點數
complex(real[,imag])創建一個復數
str(x)將對象x轉換為字元串
repr(x)將對象x轉換為表達式字元串
eval(str)用來計算在字元串中的有效Python表達式,並返回一個對象
tuple(s)將序列s轉換為一個元組
list(s)將序列s轉換為一個列表
chr(x)將一個整數轉換為一個字元
unichr(x)將一個整數轉換為Unicode字元
ord(x)將一個字元轉換為它的整數值
hex(x)將一個整數轉換為一個十六進制字元串
oct(x)將一個整數轉換為一個八進制字元串
『叄』 python中怎麼把string轉換成int
1.
用數字字元串初始化int類,就可以將整數字元串(str)轉換成整數(int):
In
[1]:
int(『1234』)
Out[1]:
1234
2.
相反用整數初始化str類,就可以將整數(int)轉換為對應的字元串(str):
In
[2]:
str(1234)
Out[2]:
『1234』
3.
如果字元串是浮點數,可以用字元串初始化float類,把浮點數字元串(str)轉換成浮點數(float):
In
[3]:
float(『12.34』)
Out[3]:
12.34
(3)byte轉stringpython擴展閱讀
Python的執行:
Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte
code(位元組碼),然後再由Python
Virtual
Machine(Python虛擬機)來執行這些編譯好的byte
code。這種機制的基本思想跟Java,.NET是一致的。然而,Python
Virtual
Machine與Java或.NET的Virtual
Machine不同的是,Python的Virtual
Machine是一種更高級的Virtual
Machine。
這里的高級並不是通常意義上的高級,不是說Python的Virtual
Machine比Java或.NET的功能更強大,而是說和Java
或.NET相比,Python的Virtual
Machine距離真實機器的距離更遠。或者可以這么說,Python的Virtual
Machine是一種抽象層次更高的Virtual
Machine。
基於C的Python編譯出的位元組碼文件,通常是.pyc格式。
除此之外,Python還可以以交互模式運行,比如主流操作系統Unix/Linux、Mac、Windows都可以直接在命令模式下直接運行Python交互環境。直接下達操作指令即可實現交互操作。
參考資料
python-網路
『肆』 Python 2.7 中位元組字元串的處理求助
唔,你也沒寫具體問題…… 給你個python的字元串處理匯總吧。
str='python String function'
生成字元串變數str='python String function'
字元串長度獲取:len(str)
例:print '%s length=%d' % (str,len(str))
一、字母處理
全部大寫:str.upper()
全部小寫:str.lower()
大小寫互換:str.swapcase()
首字母大寫,其餘小寫:str.capitalize()
首字母大寫:str.title()
print '%s lower=%s' % (str,str.lower())
print '%s upper=%s' % (str,str.upper())
print '%s swapcase=%s' % (str,str.swapcase())
print '%s capitalize=%s' % (str,str.capitalize())
print '%s title=%s' % (str,str.title())
二、格式化相關
獲取固定長度,右對齊,左邊不夠用空格補齊:str.ljust(width)
獲取固定長度,左對齊,右邊不夠用空格補齊:str.ljust(width)
獲取固定長度,中間對齊,兩邊不夠用空格補齊:str.ljust(width)
獲取固定長度,右對齊,左邊不足用0補齊
print '%s ljust=%s' % (str,str.ljust(20))
print '%s rjust=%s' % (str,str.rjust(20))
print '%s center=%s' % (str,str.center(20))
print '%s zfill=%s' % (str,str.zfill(20))
三、字元串搜索相關
搜索指定字元串,沒有返回-1:str.find('t')
指定起始位置搜索:str.find('t',start)
指定起始及結束位置搜索:str.find('t',start,end)
從右邊開始查找:str.rfind('t')
搜索到多少個指定字元串:str.count('t')
上面所有方法都可用index代替,不同的是使用index查找不到會拋異常,而find返回-1
print '%s find nono=%d' % (str,str.find('nono'))
print '%s find t=%d' % (str,str.find('t'))
print '%s find t from %d=%d' % (str,1,str.find('t',1))
print '%s find t from %d to %d=%d' % (str,1,2,str.find('t',1,2))
#print '%s index nono ' % (str,str.index('nono',1,2))
print '%s rfind t=%d' % (str,str.rfind('t'))
print '%s count t=%d' % (str,str.count('t'))
四、字元串替換相關
替換old為new:str.replace('old','new')
替換指定次數的old為new:str.replace('old','new',maxReplaceTimes)
print '%s replace t to *=%s' % (str,str.replace('t', '*'))
print '%s replace t to *=%s' % (str,str.replace('t', '*',1))
五、字元串去空格及去指定字元
去兩邊空格:str.strip()
去左空格:str.lstrip()
去右空格:str.rstrip()
去兩邊字元串:str.strip('d'),相應的也有lstrip,rstrip
str=' python String function '
print '%s strip=%s' % (str,str.strip())
str='python String function'
print '%s strip=%s' % (str,str.strip('d'))
按指定字元分割字元串為數組:str.split(' ')
六、默認按空格分隔
str='a b c de'
print '%s strip=%s' % (str,str.split())
str='a-b-c-de'
print '%s strip=%s' % (str,str.split('-'))
七、字元串判斷相關
是否以start開頭:str.startswith('start')
是否以end結尾:str.endswith('end')
是否全為字母或數字:str.isalnum()
是否全字母:str.isalpha()
是否全數字:str.isdigit()
是否全小寫:str.islower()
是否全大寫:str.isupper()
str='python String function'
print '%s startwith t=%s' % (str,str.startswith('t'))
print '%s endwith d=%s' % (str,str.endswith('d'))
print '%s isalnum=%s' % (str,str.isalnum())
str='pythonStringfunction'
print '%s isalnum=%s' % (str,str.isalnum())
print '%s isalpha=%s' % (str,str.isalpha())
print '%s isupper=%s' % (str,str.isupper())
print '%s islower=%s' % (str,str.islower())
print '%s isdigit=%s' % (str,str.isdigit())
str='3423'
print '%s isdigit=%s' % (str,str.isdigit())
『伍』 怎麼在Python里使用UTF-8編碼
基本概念
在Python里有兩種類型的字元串類型:位元組字元串和Unicode的字元串,一個位元組字元串就是一個包含位元組列表。 當需要的時候,Python根據電腦默認的locale設置將位元組轉化成字元。 在Mac OX上默認的編碼是UTF-8,但是在別的系統上,大部分是ASCII。
比如創建一個位元組字元串:
byteString = "hello world! (in my default locale)"
創建一個Unicode字元串:
unicodeString = u"hello Unicode world!"
將一個位元組字元串轉成Unicode字元串然後再轉回來:
s = "hello byte string"
u = s.decode()
backToBytes = u.encode()
以上代碼使用的是系統默認的字元來出來轉換的。 然而,依賴系統的區域設置的字元集不是一個好主意,或許你的程序在泰文用戶的電腦上就會崩潰。 最好的辦法就是為字元指定一個編碼:
s = "hello normal string"
u = s.decode("UTF-8" )
backToBytes = u.encode( "UTF-8" )
現在,位元組字元串s就被當成一個UTF-8位元組列表去創建一個Unicode字元串u, 下一行用UTF-8表示的字元串u轉換成位元組字元串backToBytes.