python爬蟲學習二: urllib2模塊的學習

python爬蟲學習二:  urllib2模塊的學習python


一、urllib2介紹服務器

   urllib2是使用各類協議完成打開url的一個擴展包。作簡單的使用方法是調用uropen方法。cookie

   import urllib2
   content_stream = urllib2.urlopen('http://www.baidu.com/')
   content = content_stream.read()
   print content


   便可以接受一個字符串類型的URL地址,或者一個Request對象。而後打開這個URL,返回結果爲一個像文件對象python爬蟲

同樣的對象。socket



   通常咱們直接調用urllib2中的urlopen()就是表示去調用build_opener()方法,而後用build_opener()方法返回ide

的類的對象去調用該對象的open方法。工具


二、urllib2使用細節:post


a、Proxy的設置學習

urllib2默認會使用環境變量http_proxy來設置HTTP Proxy。若是想要在程序中明確的控制Proxy而不受環境變量的ui

影響,可使用它。

import urllib2
enable_proxy =True
proxy_handler = urllib2.ProxyHandler({"http":"http://some-proxy.com:8080"})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
opener = urllib2.build_opener(proxy_handler)
else:
opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)//install_opener()改變了全局的設置,若不想改變全局,須要用opener的open
方法。


b、Timeout設置

在老版本的python中,要設置timeout值,必須更改Socket的全局Timeout值。

import socket
import urllib2
socket.setdefaulttimeout(10)
urllib2.socket.setdefaulttimeout(10)//這是兩種方式,均可以


python2.6之後,超時能夠經過urllib2.urlopen()的timeout參數直接設置。

import urllib2
response = urllib2.urlopen('http://www.baidu.com/',timeout = 10)


c、在HTTP Request中加入特定的Header

import urllib2
request = urllib2.Request(url)
request.add_header('user-agent','fake-client')
response = urllib2.urlopen(request)


d、cookie

urllib2對cookie的處理也是自動的。若是須要獲得某個cookie項的值,能夠:

import urllib2
import cookielib
cookie = cookielib.CookieJar()
opener = urllib2.build_opener.HTTPCookieProcess(cookie)
response = opener.open('http://www.baidu.com/')
for item in cookie:
if item.name == 'some_cookie_item_name':
print item.value

e、獲得HTTP的返回碼

須要檢查異常對象的code屬性。

import urllib2
try:
resopnse = urllib2.urlopen('http://www.baidu.com')
except urllib2.HTTPError,e:
print e.code


三、urlopen的兩個頗有用的方法,geturl()和info()


a、geturl()

返回一個真實的URL,由於urlopen或許會有重定向,獲取到URL或許跟請求url不一樣。

b、info():

返回對象的字典對象,該字典描述了獲取的頁面狀況。一般是服務器發送的特定頭headers。目前是httplib.HTTPMessage

實例。經典的headers包含"Content-length","Content-type",和其餘內容。


四、表單的處理:

有的網頁須要登陸才能看到,須要填表,表單怎麼填?


首先利用工具截取索要填表的內容。通常能夠利用Firefox+httpfox插件來看看本身到底發送了些什麼包。

import urllib2
import urllib
postdata = urllib.urlencode({
'username':'qester',
'passwd':'*******',
'login_summit':'登陸'
})
req = urllib2.Request(
url = 'http://secure.baidu.com/sigin',
data = postdata,
)
result = urllib2.urlopen(req)
print result.read()
相關文章
相關標籤/搜索