對(duì)于python的中文編碼問(wèn)題可以參考下面的帖子
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),金鄉(xiāng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:金鄉(xiāng)等地區(qū)。金鄉(xiāng)做網(wǎng)站價(jià)格咨詢:18980820575
同時(shí),對(duì)于網(wǎng)頁(yè)的中文亂碼,建立使用requests模塊代替urllib\urllib2
requests的content方法,對(duì)中文編碼,支持比較好,基本不會(huì)出現(xiàn)亂碼。
req=requests.get(url,cookies=mecookies)
print req.content
具體用法,參見(jiàn)下面兩個(gè)帖子,較詳細(xì):
你這行代碼是不需要urlencode()的。
對(duì)于返回的request對(duì)象,其read()方法獲得的其實(shí)是一個(gè)字節(jié)流對(duì)象,而非字符串對(duì)象,所以這時(shí)需要調(diào)用該字節(jié)流對(duì)象的decode()方法,按指定編碼方式進(jìn)行解碼。
至于urlencode(),這是urllib中的一個(gè)函數(shù),它的作用是將字符串進(jìn)行url編碼。這個(gè)編碼其實(shí)就是個(gè)轉(zhuǎn)義的過(guò)程,將那些因可能造成解釋器誤會(huì)或安全問(wèn)題而不適合出現(xiàn)在請(qǐng)求中的符號(hào)進(jìn)行轉(zhuǎn)義,并且把超出url編碼表的字符降維。
爬蟲(chóng)我也是接觸了1個(gè)月,從python小白到現(xiàn)在破譯各種反爬蟲(chóng)機(jī)制,我給你說(shuō)說(shuō)我的方向:
1、學(xué)習(xí)使用解析網(wǎng)頁(yè)的函數(shù),例如:
import?urllib.request
if?__name__?==?'__main__':
url?=?"..."
data?=?urllib.request.urlopen(url).read()?????#urllib.request.urlopen(需要解析的網(wǎng)址)
data?=?data.decode('unicode_escape','ignore')?#用unicode_escape方式解碼
print(data)
2、學(xué)習(xí)正則表達(dá)式:
正則表達(dá)式的符號(hào)意義在下面,而正則表達(dá)式是為了篩選出上面data中的信息出來(lái),例如:
def get_all(data):
reg = r'(search.+)(" )(mars_sead=".+title=")(.+)(" data-id=")'
all = re.compile(reg);
alllist = re.findall(all, data)
return alllist
3、將得到的結(jié)果壓進(jìn)數(shù)組:
if?__name__?==?'__main__':
info = []
info.append(get_all(data))
4、將數(shù)組寫進(jìn)excel:
import xlsxwriter
if?__name__?==?'__main__':
info = []
info.append(get_all(data))
workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\什么文件名.xlsx') ?# 創(chuàng)建一個(gè)Excel文件
worksheet = workbook.add_worksheet() ?# 創(chuàng)建一個(gè)工作表對(duì)象
for i in range(0,len(info)):
worksheet.write(行, 列, info[i], font)#逐行逐列寫入info[i]
workbook.close()#關(guān)閉excel
一個(gè)簡(jiǎn)單的爬蟲(chóng)搞定,爬蟲(chóng)的進(jìn)階不教了,你還沒(méi)接觸過(guò)更加看不懂