06.06 python網絡爬蟲簡明手冊1

1 網絡爬蟲是何物?

說到網絡爬蟲,然而它並不是一種爬蟲~

而是一種可以在網上任意搜索的一個腳本程序。

有人說一定要解釋網絡爬蟲到底是幹毛用的。

嘗試用了很多種解釋,最終歸納為一句話:

“你再也不必用鼠標一條一條從網頁上拷貝信息!”

一個爬蟲程序將會高效並且準確的從網上拿到你希望要到的所有信息,從而省去你的以下行

為:

while(no_dead)

{

尋找網頁;

鼠標點擊;

ctrl-c;

crtl-v;

翻頁;

}

當然網絡爬蟲的真正意義不僅如此,由於它可以自動提取網頁信息,使他成為了 搜索引擎 從

萬維網上下載網頁的重要利器。

下面我們來介紹一下網絡爬蟲的正經定義。

網絡爬蟲 (又被稱為網頁蜘蛛,網絡機器人,更經常的稱為網頁追逐者),是一種按照一定

的規則,自動地抓取 萬維網 信息的 程序 或者 腳本 。另外一些不常使用的名字還有螞蟻、自

動索引、模擬程序或者 蠕蟲 。

網絡爬蟲 (web Spider),Spider是蜘蛛的意思,實際上名字是很形象的,他們把 互聯網 比喻

成一個 蜘蛛網 ,那麼所謂的這個spider就在網上爬來爬去。這個網絡蜘蛛是通過網頁的鏈接

地址來尋找網頁的。

蜘蛛的主要行徑: 網頁首頁—>讀取網頁內容—>找到網頁中其他的鏈接地址—>其他網頁的

首頁—>……

這樣的循環下去,直到將這個網站上所有的網頁都吃光(網頁上所有的信息全部用蜘蛛得

到)。

python網絡爬蟲簡明手冊1

如果你敢把互聯網比喻成一個網站,一定會有那麼一個網絡蜘蛛能夠可以把 整個互聯網 的資

源全部吃光!!!

ok,那麼顯而易見,網絡爬蟲的基本操作就是抓取網頁。網頁地址就是一個叫URL的東西,

那麼我們先要簡單處理一下URL。

2 URL初步概念

我們先來介紹一下瀏覽網頁的基本過程。

比如我們在瀏覽器地址欄輸入

http://www.itcast.cn

整個過程大致會發生以下步驟:

1. 本地瀏覽器(客戶端) ——–請求——-> 傳智服務器(服務端)

2. 本地瀏覽器(客戶端)

3. 本地瀏覽器(客戶端) 進行解析文件數據並且展現。

python網絡爬蟲簡明手冊1

那麼實際上瀏覽器用的是一種叫html標記的語言來進行解析的。

html標記語言 :http://www.w3school.com.cn/

ok,那麼到底誰是URL呢,說了半天, http://www.itcast.cn 它!就是URL!沒錯,就

是它!

我們給瀏覽器輸入的地址,實際上就是一個url(Uniform Resource Locator) 統一資源定位符 。

就是 地址 啦,搞學術的人非得弄的很高端。

明明是高利貸,他們非得說成p2p,明明是算命的,他們非得說成分析師~

URL的一般格式是: protocol:// hostname[:port] / path / [;parameters][?query]#fragment

基本上是由三部分組成:

1 協議(HTTP呀,FTP呀~~等等)

2 主機的IP地址(或者域名)

3 請求主機資源的具體地址(目錄,文件名等)

其中:

第一部分和第二部分用 “://” 分割

第二部分和第三部分用 “/” 分割

1://2/3 —–> http://www.itcast.cn/channel/teacher.shtml#ac

下面看幾個URL例子:

http://xianluomao.sinaapp.com/game

其中

協議http,

計算機域名xianluomao.sinaapp.com,

請求目錄game

http://help.qunar.com/list.html

其中協議http,

計算機域名help.qunar.com

文件list.html

網絡爬蟲的主要處理對象就是類似於以上的URL,爬蟲根據URL地址取得所需要的文

件內容,然後對它進一步的處理。

3 python 與 urllib2

現在迫不及待已經想要嘗試一下url和網絡爬蟲的配合關係了。說道編程我們必須採用一種編

程語言。

這裡我們選擇的是python,python的可移植性和精煉簡潔的特徵無疑是跨平臺腳本的最好語

言選擇。

我們這裡使用的是:python2.7.x 版本,就是2.7之後的版本,Python3的改動略大,

這裡不用它。

我們上一節已經介紹過,爬蟲就是把URL地址中的網絡資源讀取出來,然後處理(保存到本

地,或者打印等等)

當然我們可以通過鼠標和瀏覽器來幹這件事,但是如果落實到代碼上改如何處理之呢?

這時候就出來一個組件: urllib2 。

這個哥們是Python獲取URL的一個組件。

我們首先創建一個urllib2_test01.py ,然後輸入以下代碼

import urllib2

response = urllib2.urlopen('http://www.baidu.com')

html = response.read()

print html

Quite Easy! 最簡單的獲取一個url的信息代碼居然只需要4行!

執行寫的python代碼,

python urllib2_test.py

會看到以下結果。

<link><link>

e="application/opensearchdescription+xml" href="/content-search.xm

l" title="百度搜索" /><link><link><link><link>

l="dns-prefetch" href="//t2.baidu.com"/><link>

ef="//t3.baidu.com"/><link><link><link><link>

f="//b1.bdstatic.com"/>

<title>百度一下,你就知道/<title>

...

實際上,如果我們在瀏覽器上打開百度主頁, 右鍵選擇“查看源代碼”,你會發現,跟我們剛

才打印出來的是一模一樣。也就是說,上面的4行代碼就已經幫我們把百度的首頁的全部代

碼爬了下來。

我們來分析一下上面的這4行代碼:

首先

import urllib2

沒什麼說的,就是將urllib2組建引入進來,供給我們使用。

response = urllib2.urlopen('http://www.baidu.com')

然後調用urllib2庫中的urlopen方法,該方法接受一個url地址,然後將請求後的得到的回應封

裝到一個叫response對象中。

html = response.read()

然後 調用response對象的read()方法,將請求的回應內容以字符串形式給html變量。

最後的print html就是將字符串打出來。

所以說一個基本的url請求是對應的python代碼是非常簡單的。

當然還有第二種寫法,先通過將一個url地址轉換成一個Request請求對象,再將Request請

求對象作為參數傳遞給urlopen方法。

import urllib2

req = urllib2.Request('http://www.baidu.com')

response = urllib2.urlopen(req)

my_page = response.read()

print my_page

但是這樣直接用python的urllib2給一個網站發送請求的話,確實略有些唐突了,就好比,人

家每家都有門,你以一個 路人 的身份直接闖進去顯然不是很禮貌,有可能對於有的網站會

拒絕 你的請求。

但是如果我們用一個合法的身份去請求別人網站,顯然人家就是歡迎的。

所以我們就應該給我們的這個代碼加上一個身份,就是所謂的 User-Agent 頭。

what?這是個什麼鬼?顯然如果你不是學習前端專業的,這個東西確實對於C或者後端開發

工程師是一個頭疼的東西,不過不要緊,不是我們的東西我們只作為了解即可。

我只需要告訴你一句話,就是你用 不同的瀏覽器 在發送請求的時候,會有不同的 User-

Agent 頭。

瀏覽器 就是世界上 被允許的身份 。那麼如果你不想你的爬蟲代碼成為一個路人,你需要偽裝

成一個被 公認的瀏覽器 。

偽裝的辦法當然就是給自己的請求加上一個對應的User-Agent頭啦。

我們編輯urllib2_test03.py

import urllib2

#我們要請求的url地址

url = "http://www.baidu.com"

#我們要偽裝的瀏覽器user-agent頭

user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Tr

ident/5.0;' #IE 9.0

#創建一個字典,使請求的headers中'User-Agent':對應我們user_agent字符串

headers = {'User-Agent':user_agent}

#新建一個請求,需要將請求中的headers變量換成我們剛才創建好的headers

req = urllib2.Request(url, headers = headers)

#請求服務器,得到回應

response = urllib2.urlopen(req)

#得到回應的內容

the_page = response.read()

#將內容打到屏幕上

print the_page

以上就是url的一個基本的操作,那麼如果你想實現一個簡單的爬蟲,這些就足以了。但是如

果你想深入去了解urllib2的其他操作,顯然這個教程滿足不了你,你可以去尋找一些其他相

關教程。

我們下一節繼續介紹有關urllib2的知識,而且最後如何得到一個精簡的小爬蟲程序!


分享到:


相關文章: