【Python網絡爬蟲二】使用urllib2抓去網頁內容

在Python中經過導入urllib2組件,來完成網頁的抓取工做。在python3.x中被改成urllib.request。html

爬取具體的過程相似於使用程序模擬IE瀏覽器的功能,把URL做爲HTTP請求的內容發送到服務器端, 而後讀取服務器端的響應資源。python

 

實現過程:

1 import urllib2
2 
3 response=urllib2.urlopen('http://gs.ccnu.edu.cn/')
4 html=response.read()
5 print html

將返回的html信息打印出來,這和在網站上右鍵,查看源碼看到的內容是同樣的。瀏覽器經過這些源碼,將要現實的內容渲染出來。python3.x

 

除了"http:",URL一樣可使用"ftp:","file:"等等來替代。瀏覽器

HTTP是基於請求和應答機制的:服務器

客戶端提出請求,服務端提供應答。post

 

一樣urllib2,能夠經過模擬一個請求,而後將這個請求做爲參數傳入urlopen中,在讀取返回的內容。網站

1 import urllib2
2 
3 req=urllib2.Request('http://gs.ccnu.edu.cn/')
4 response2=urllib2.urlopen(req)
5 page=response2.read()
6 print page

模擬ftp請求:編碼

1 req=urllib2.Request("ftp://example.com/")

 

在進行http請求的時候能夠作兩件事url

1.發送data表單數據

有時候咱們在爬取網頁的時候,須要提交一個表單,模擬登錄或者註冊的操做。spa

一般http中經過post操做完成, 而在request時,提交的data表單須要講過urllib中encode編碼成標準的方式。

 1 import urllib  
 2 import urllib2  
 3 
 4 url = 'http://www.someserver.com/register.cgi'  
 5   
 6 values = {"input1": "SeeKHit", 
 7           "input2": "123456", 
 8           "__EVENTTARGET": "btnLogin", 
 9           "__EVENTARGUMENT": "" }  
10 
11 data = urllib.urlencode(values) # 編碼工做
12 req = urllib2.Request(url, data)  # 發送請求同時傳data表單
13 response = urllib2.urlopen(req)  #接受反饋的信息
14 the_page = response.read()  #讀取反饋的內容

2.設置Header到http請求

有時候創建http鏈接後,服務器會根據瀏覽器傳過去的User-Agent頭來,返回不一樣的內容給客戶端。已達到不一樣的顯示效果。(如安卓上的uc瀏覽器,就有一個設置設備標識的,如手機版,電腦版,ipad)

Python支持能夠自定義的發送過去的User-Agent頭,將自定義的字典做爲User-Agent頭做爲一個參數,建立一個請求。

如下代碼,講User-Agent假裝成IE瀏覽器來,進行訪問。

1. 應用程序版本「Mozilla/4.0」表示:你使用Maxthon 2.0 瀏覽器使用 IE8 內核;
2. 版本標識「MSIE 8.0」
3. 平臺自身的識別信息「Windows NT 」表示「操做系統爲 Windows」

 1 url = 'http://www.someserver.com/register.cgi'
 2 user_agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT)'
 3 headers = { 'User-Agent' : user_agent }
 4 values = {"input1": "SeeKHit",
 5           "input2": "123456",
 6           "__EVENTTARGET": "btnLogin",
 7           "__EVENTARGUMENT": "" }
 8 
 9 data = urllib.urlencode(values) # 編碼工做
10 req = urllib2.Request(url, data, headers)  # 發送請求,傳data表單,模擬User-
11 response = urllib2.urlopen(req)  #接受反饋的信息
12 the_page = response.read()  #讀取反饋的內容
相關文章
相關標籤/搜索