本節(jié)編寫一個(gè)最簡單的爬蟲程序,作為學(xué)習(xí)Python爬蟲前的開胃小菜。 下面使用Python內(nèi)置的urllib庫獲取網(wǎng)頁的html信息。注意,urllib庫屬于Python的標(biāo)準(zhǔn)庫模塊,無須單獨(dú)安裝,它是Python爬蟲的常用模塊。 獲取網(wǎng)頁html信息1)獲取響應(yīng)對象 向百度(http://www.baidu.com/)發(fā)起請求,獲取百度首頁的HTML信息,代碼如下: #導(dǎo)包,發(fā)起請求使用urllib庫的request請求模塊import urllib.request# urlopen()向URL發(fā)請求,返回響應(yīng)對象,注意url必須完整response=urllib.request.urlopen('http://www.baidu.com/') print(response)12345復(fù)制代碼類型:[python] 上述代碼會返回百度首頁的響應(yīng)對象,其中urlopen()表示打開一個(gè)網(wǎng)頁地址。注意:請求的url必須帶有http或者h(yuǎn)ttps傳輸協(xié)議。 輸出結(jié)果,如下所示: <http.client.HTTPResponse object at 0x032F0F90>1復(fù)制代碼類型:[python] 上述代碼也有另外一種導(dǎo)包方式,也就是使用from,代碼如下所示: #發(fā)起請求使用urllib庫的request請求模塊from urllib import request response=request.urlopen('http://www.baidu.com/') print(response)1234復(fù)制代碼類型:[python] 2)輸出HTML信息 在上述代碼的基礎(chǔ)上繼續(xù)編寫如下代碼: #提取響應(yīng)內(nèi)容html = response.read().decode('utf-8')#打印響應(yīng)內(nèi)容print(html)1234復(fù)制代碼類型:[python] 輸出結(jié)果如下,由于篇幅過長,此處只做了簡單顯示: <!DOCTYPE html><!--STATUS OK--> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description" content="全球最大的中文搜索引擎、致力于讓網(wǎng)民更便捷地獲取信息,找到...">...</html>1復(fù)制代碼類型:[python] 通過調(diào)用response響應(yīng)對象的read()方法提取HTML信息,該方法返回的結(jié)果是字節(jié)串類型(bytes),因此需要使用decode()轉(zhuǎn)換為字符串。程序完整的代碼程序如下: import urllib.request# urlopen()向URL發(fā)請求,返回響應(yīng)對象response=urllib.request.urlopen('http://www.baidu.com/')# 提取響應(yīng)內(nèi)容html = response.read().decode('utf-8')# 打印響應(yīng)內(nèi)容print(html)1234567復(fù)制代碼類型:[python] 通過上述代碼獲取了百度首頁的html信息,這是最簡單、最初級的爬蟲程序。后續(xù)我們還學(xué)習(xí)如何分析網(wǎng)頁結(jié)構(gòu)、解析網(wǎng)頁數(shù)據(jù),以及存儲數(shù)據(jù)等。 常用方法在本節(jié)您認(rèn)識了第一個(gè)爬蟲庫urllib,下面關(guān)于urllib做簡單總結(jié)。 1)urlopen() 表示向網(wǎng)站發(fā)起請求并獲取響應(yīng)對象,如下所示: urllib.request.urlopen(url,timeout)1復(fù)制代碼類型:[python] urlopen()有兩個(gè)參數(shù),說明如下: url:表示要爬取數(shù)據(jù)的url地址。 timeout:設(shè)置等待超時(shí)時(shí)間,指定時(shí)間內(nèi)未得到響應(yīng)則拋出超時(shí)異常。 2)Request() 該方法用于創(chuàng)建請求對象、包裝請求頭,比如重構(gòu)User-Agent(即用戶代理,指用戶使用的瀏覽器)使程序更像人類的請求,而非機(jī)器。重構(gòu)User-Agent是爬蟲和反爬蟲斗爭的第一步。在下一節(jié)會做詳細(xì)介紹。 urllib.request.Request(url,headers)1復(fù)制代碼類型:[python] 參數(shù)說明如下: url:請求的URL地址。 headers:重構(gòu)請求頭。 3)html響應(yīng)對象方法 bytes = response.read() # read()返回結(jié)果為 bytes 數(shù)據(jù)類型string = response.read().decode() # decode()將字節(jié)串轉(zhuǎn)換為 string 類型url = response.geturl() # 返回響應(yīng)對象的URL地址code = response.getcode() # 返回請求時(shí)的HTTP響應(yīng)碼1234復(fù)制代碼類型:[python] 4)編碼解碼操作 #字符串轉(zhuǎn)換為字節(jié)碼string.encode("utf-8") #字節(jié)碼轉(zhuǎn)換為字符串bytes.decode("utf-8") |
|