python-23:爬取第一個網頁的源碼

在這個項目中,咱們使用到的網址是
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,亂碼的問題已經解決了

相關文章
相關標籤/搜索