標籤:
1、使用python的庫urllib2,用到urlopen和Request方法。
2、方法urlopen原形
urllib2.urlopen(url[, data][, timeout])
其中:
url表示目標網頁地址,可以是字串,也可以是請求對象Request
data表示post方式提交給目標伺服器的參數
timeout表示逾時時間設定
改方法返回一個類似檔案的對象,有geturl()、info()、read()方法其中geturl()返回串連地址,info()返回網頁資訊。
要擷取網頁內容可以使用read()方法,read也可以帶參數,表示讀取內容的大小(位元組)。
例子:
[python] view plaincopy
- >>> import urllib2
- >>> socket = urllib2.urlopen("http://www.baidu.com")
- >>> content = socket.read()
- >>> socket.close()
這樣,網頁的內容(content)就爬下來了,但是有些網站禁止爬蟲,如果直接請求會出現以下錯誤:
urllib2.HTTPError: HTTP Error 403: Forbidden
解決方案是可以在請求加上頭資訊,偽裝成瀏覽器的訪問行為,需要用到Request方法:
3、方法Request原型
urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
其中:
url表示目標網頁地址,可以是字串,也可以是請求對象Request
data表示post方式提交給目標伺服器的參數
headers表示使用者標識,是一個字典類型的資料,有些不允許指令碼的抓取,所以需要使用者代理程式,像Firefox瀏覽器的代理就是類似:Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11 瀏覽器的標準UA格式為:瀏覽器標識 (作業系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本資訊 ,headers預設是Python-urllib/2.6
origin_req_host表示請求方的主機網域名稱或者ip地址
看一個例子:
[python] view plaincopy
- >>> headers = {‘User-Agent‘:‘Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11‘}
- >>> req = urllib2.Request(url="http://blog.csdn.net/deqingguo",headers=headers)
- >>> socket = urllib2.urlopen(req)
- >>> content = socket.read()
- >>> socket.close()
列子2:
import urllib2 as ulurl = ‘http://www.dd.com/products?selected.classification=Primary+antibodies&selected.researchAreas=Metabolism--Types+of+disease--Cancer‘headers = {‘User-Agent‘:‘Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11‘} req = ul.Request(url,headers=headers) f = ul.urlopen( req )content = f.read();print f.getcode();
[python] view plaincopy
- <pre></pre>
- <p></p>
- <pre></pre>
python使用urllib2抓取網頁