Python中的urllib2庫的使用

今天研究了下urllib2這個庫的使用,才發現之前有不少不明白的東西,如今寫下來也作個記錄html

1. 最基礎的應用python

import urllib2

url = r'http://www.baidu.com'
html = urllib2.urlopen(url).read()

print html

客戶端與服務器端經過request與response來溝通,客戶端先向服務端發送request,而後接收服務端返回的responseajax

urllib2提供了request的類,可讓用戶在發送請求前先構造一個request的對象,而後經過urllib2.urlopen方法來發送請求服務器

import urllib2

url = r'http://www.baidu.com'
req = urllib2.Request(url)
html = urllib2.urlopen(req).read()
print html

上例中先使用req = urllib2.Request(url)實例化一個resquest對象,接下來使用urllib2.urlopen(req)來打開這個網頁cookie

咱們注意到在實例化Request對象的時候,隊了url是必須的,還有幾個默認的參數post

attars

基中data與header也是使用的比較多的,一些須要登陸的才能瀏覽的網站常常須要這兩個參數網站

import urllib 
import urllib2  
 
url = 'http://www.baidu.com/'  
values = {'name' : 'Michael Foord', 'location' : 'Northampton','language' : 'Python' }   
data = urllib.urlencode(values)  
req = urllib2.Request(url,data)  
response = urllib2.urlopen(req)  
the_page = response.read()

print the_page

這個例子是向百度發送幾個數據,這個例子是會返回一個錯誤頁面,很正常,由於咱們在訪問百度的時候並不須要post什麼信息,post了卻是會出錯ui

百度是找不到相應的網頁就會報錯。編碼

固然這個是POST數據,也能夠用在GET方法,稍將上面的代碼進行改造url

百度是經過http://www.baidu.com/s?wd=XXX 來進行查詢的,這樣咱們須要將{‘wd’:’xxx’}這個字典進行urlencode

#coding:utf-8
import urllib 
import urllib2  
 
url = 'http://www.baidu.com/s'  
values = {'wd':'楊彥星'}   
data = urllib.urlencode(values)
print data 
url2 = url+'?'+data
response = urllib2.urlopen(url2)  
the_page = response.read()

print the_page

如下以模擬登陸人人網而後再顯示首頁內容爲例來詳細說明一下cookie的使用,如下是文檔中給的例子,咱們就經過改造這個例子來實現咱們想要的功能

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")

 

#coding:utf-8
import urllib2,urllib
import cookielib

url = r'http://www.renren.com/ajaxLogin'

#建立一個cj的cookie的容器
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#將要POST出去的數據進行編碼
data = urllib.urlencode({"email":email,"password":pass})
r = opener.open(url,data)
print cj

當你看到有cj的時候,說明你已經訪問了登陸頁面,是否正常登陸你如今還看不出來,能夠經過訪問http://www.renren.com/home 來查看

上面的代碼有兩點要說明,我也是看了很長時間才明白

r = opener.open(url,data) 這句,爲何要使用opener這個對象來open,而不是用utllib2,urlopen?不光是例子裏這麼寫,咱們才這麼寫,經過改造咱們也可使用urllib2.urlopen,實際上是由於opener是urllib2.bulid_opener創造出來的, 可是你能夠這樣理解,他build出來後,自已卻並無安裝使用它,也沒有它的屬性與方法,若是想使urllib2也具備opener的屬性與方法,能夠先使用urllib2.install_opener(opener)來"安裝"這個opener,安裝完之後就可使用urllib2來操做了

#coding:utf-8
import urllib2,urllib
import cookielib

url = r'http://www.renren.com/ajaxLogin'

#建立一個cj的cookie的容器
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
#將要POST出去的數據進行編碼
data = urllib.urlencode({"email":email,"password":pass})
#r = opener.open(url,data)若是沒有上面的urllib2.install_opener方法,就必須這樣寫了
r = urllib2.urlopen(url,data)
html = urllib2.urlopen('http://www.renren.com/home').read()

print html

一樣urllib2還有proxy相關的handle,基本的思路和這個差很少

相關文章
相關標籤/搜索