在這個項目中,咱們使用到的網址是
html
http://product.yesky.com/more/506001_31372_photograph_1.shtml
python
首先是第一個網頁源碼的爬取,總體代碼跟上一個相似,可是爲了能讓你們更熟悉代碼的編寫,建議從頭開始再本身敲一遍python爬蟲
#!/uer/bin/env python # -*- coding: UTF-8 -*- __author__ = '217小月月坑' ''' 獲取網頁源碼 ''' import urllib2 url = 'http://product.yesky.com/more/506001_31372_photograph_1.shtml' user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0' headers = {'User-Agent':user_agent} try: request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request) print response.read() except urllib2.URLError,e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): print e.reason
好了,第一步爬取網頁的源碼就這麼簡單,咱們來看輸出結果函數
等等,怎麼回事,輸出結果中爲何會有亂碼?ui
好吧只能上網查資料編碼
"源網頁編碼和爬取下來後的編碼轉換不一致。如源網頁爲gbk編碼的字節流,而咱們抓取下後程序直接使用utf-8進行編碼並輸出到存儲文件中,這必然會引發亂碼"url
因此解決的方法只能是解碼,先找出網頁的編碼方式,再將爬取下來的網頁源碼按網頁的編碼方式進行解碼,要實現這個功能,在python中使用decode()方法spa
Python decode()方法 描述 Python decode() 方法以 encoding 指定的編碼格式解碼字符串。默認編碼爲字符串編碼。 語法 decode()方法語法: str.decode(encoding='UTF-8',errors='strict') 參數 encoding -- 要使用的編碼,如"UTF-8"。 errors -- 設置不一樣錯誤的處理方案。默認爲 'strict',意爲編碼錯誤引發一個UnicodeError。 其餘可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及經過 codecs.register_error() 註冊的任何值。 返回值 該方法返回解碼後的字符串。 相應的,有解碼就會有編碼,python中使用 encode()方法進行編碼,參數與decode()同樣
在python爬蟲代碼中,要解碼其實很簡單,將urllib2.urlopen()中返回的內容直接使用decode函數解碼便可調試
好比在前面寫的源碼中,只要將code
contents = response.read()
改爲
contents = response.read().decode("gbk")
就能夠了
這裏說一下,gbk
gbk是極視界網頁使用的編碼方式,那麼怎麼知道一個網頁所使用的編碼方式是什麼呢?
1. 按F12調處調試界面,找到Content-Type 這項,後面就是網頁源碼的編碼格式
2. 在網頁源碼中通常會寫有編碼格式 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
那麼,修改以後的輸出是什麼樣的呢?
OK,亂碼的問題已經解決了