Python 網(wǎng)絡(luò)請求模塊 urllib 、requests
創(chuàng)新互聯(lián)建站是專業(yè)的羅甸網(wǎng)站建設(shè)公司,羅甸接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行羅甸網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Python 給人的印象是抓取網(wǎng)頁非常方便,提供這種生產(chǎn)力的,主要依靠的就是 urllib、requests這兩個模塊。
Requests 是一個簡單易用的,用Python編寫的HTTP庫。這個庫讓我們能夠用簡單的參數(shù)就完成HTTP請求,而不必像 urllib 一樣自己指定參數(shù)。同時能夠自動將響應(yīng)轉(zhuǎn)碼為Unicode,而且具有豐富的錯誤處理功能。
以下為一些示例代碼,本文環(huán)境為 Python 3.6
無需參數(shù)直接請求單個頁面
import urllib
from urllib.request import request
from urllib.urlopen import urlopen
# import urllib2
import requests
# 使用 urllib 方式獲取
response = urllib.request.urlopen('http://www.baidu.com')
# read() 讀取的是服務(wù)器的原始返回數(shù)據(jù) decode() 后會進行轉(zhuǎn)碼
print(response.read().decode())
# 使用 requests 方式獲取
# request 模塊相比
resp = requests.get('http://www.baidu.com')
print(resp)
print(resp.text)
HTTP 是基于請求和響應(yīng)的工作模式,urllib.request 提供了一個 Request 對象來代表請求,因此上面的代碼也可以這么寫
req = urllib.request.Request('http://www.baidu.com')
with urllib.request.urlopen(req) as response:
print(response.read())
Request對象可以增加header信息
req = urllib.request.Request('http://www.baidu.com')
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
with urllib.request.urlopen(req) as response:
print(response.read())
或者直接將 header 傳入 Request 構(gòu)建函數(shù)。
帶參數(shù)的 GET 請求
帶有參數(shù)的請求和上面的例子本質(zhì)一樣,可以事先拼出URL請求字符串,然后再進行請求。
本例使用了 騰訊 的股票API,可以傳入不同的股票代碼以及日期,查詢對應(yīng)股票在對應(yīng)時間的價格、交易信息。
# 使用帶參數(shù)的接口訪問
tencent_api = "http://qt.gtimg.cn/q=sh"
response = urllib.request.urlopen(tencent_api)
# read() 讀取的是服務(wù)器的原始返回數(shù)據(jù) decode() 后會進行轉(zhuǎn)碼
print(response.read())
resp = requests.get(tencent_api)
print(resp)
print(resp.text)
發(fā)送 POST 請求
urllib 沒有單獨區(qū)分 GET 和 POST 請求的函數(shù),只是通過 Request 對象是否有 data 參數(shù)傳入來判斷。
import urllib.parse
import urllib.request
url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
data = urllib.parse.urlencode(values)
data = data.encode('ascii') # data should be bytes req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as response:
the_page = response.read()