Python urllib簡單使用


Python的urllib和urllib2模塊都做與請求URL相關的操作。

它們最顯著的差異為:

urllib2可以接受一個Request對象,並以此可以來設置一個URL的headers,但是urllib只接收一個URL。

urllib模塊可以提供進行urlencode的方法,該方法用於GET查詢字符串的生成,urllib2的不具有這樣的功能.

python 2.7.x提供了urllib與urllib2,鑒於上述異同兩個庫通常搭配使用。

urlopen

urllib2.urlopen(url, *data, *timeout)

urlopen方法是urllib2模塊最常用的方法,用於訪問發送某一請求。

url參數可以是一個字符串url或者是一個Request對象。

可選參數timeout用於設置超時時間,以秒為單位。

如果沒有指定,將使用設置的全局默認timeout值。

urlopen使用默認opener進行訪問, 為阻塞式IO.

如果請求成功,函數將返回響應。

在data為None時默認用GET方法:

import urllib2
response = urllib2.urlopen('http://python.org/')
html = response.read()
print(html)

使用POST發送參數前需要先將參數編碼:

import urllib
import urllib2

values = {
    'action': 'sign-in',
    'username': 'finley',
    'password': '1234'
}
values = urllib.urlencode(values)
response = urllib2.urlopen('http://127.0.0.1:8080/game', values)
print(response.read())

urllib.urlencode不能直接進行Unicode編碼,需要先進行轉碼:

urllib.urlencode (u'bl'.encode('utf-8'))

qutoe與urlencode均可以進行編碼,區別在於quote的空格由%20替代而urlencode的空格由+替代。

Request

使用Request對象可以設置更多請求參數:

Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

  • url: url字符串

  • data:額外發送的數據

在data為None時默認用GET方法提交,有參數時默認用POST方法提交

示例:

import urllib
import urllib2
url = 'http://127.0.0.1:8080/game'
values = {
    'action': 'sign-in',
    'username': 'finley',
    'password': '1234'
}
data = urllib.urlencode(values)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
html = response.read()

cookie

為了使用cookie我們需要一個opener對象來維護cookiejar.

class BaseDriver:
    def __init__(self):
        self.opener = None
        self.cookiejar = None
        self.initOpener()

    def initOpener(self):
        self.cookiejar = cookielib.CookieJar()
        self.opener = urllib2.build_opener(
            urllib2.HTTPCookieProcessor(self.cookiejar)
        )

    def get_cookie(self):
        for cookie in self.cookiejar:
            if cookie.name == 'csrftoken':
                return cookie.value
        return None

    def doRequest(self, action, values):
        data = urllib.urlencode(values)
        request = urllib2.Request(url, data)
        return self.opener.open(request)

參考資料:

urllib與urllib2的學習總結(python2.7.X)

Python爬蟲入門六之Cookie的使用

urllib module doc

urllib2 module doc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM