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()