python requests包的基本使用


Requests
安裝requests模塊:
D:\Install\Python36>pip3 install requests
請求方式
#coding:utf-8 import requests requests.get("http://www.baidu.com") requests.post("http://www.baidu.com") #requests.put("http請求") #requests.delete("http請求") #requests.head("http請求") #requests.options("http請求")

帶參數GET請求 第一種 #coding:utf-8 import requests response = requests.get("http://httpbin.org/get?name=gemey&age=22") print(response.text) 第二種 #coding:utf-8 import requests d = { 'name': 'tom', 'age': 20 } response = requests.get('http://httpbin.org/get', params=d) print(response.text)

get請求也可以跟data參數,與params的區別是:
1、params直接將 d 參數 拼接到url,而使用data類似post請求的data使用不會拼接到url;
2、對類似flask服務端而言,params參數通過request.args讀取傳入參數,而data參數通過request.data讀取,post請求同樣處理
3、headers的Content-Type傳輸格式對服務端獲取請求數據,也有影響,如果傳輸json格式,
  heads={'Content-Type':'application/json'},服務端可以通過request.json或者request.get_json(),直接轉化為字典操作;
不設置headers 可能只有request.data獲取數據,不能直接轉換dict
4、服務端如果返回的json串,中文亂碼,則可以設置json.dumps(d,ensure_ascii=False) 或者flask的app設置
app.config['JSON_AS_ASCII'] = False
 
         

response = requests.get('http://httpbin.org/get', data=d)


帶請求頭
#coding:utf-8
import requests
heads = {}
heads[
'User-Agent'] = 'Mozilla/5.0 ' \ '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \ '(KHTML, like Gecko) Version/5.1 Safari/534.50' response = requests.get('http://www.baidu.com',headers=heads)



POST請求
#coding:utf-8 import requests data = {'name':'tom','age':'22'} response = requests.post('http://httpbin.org/post', data=data).status_code #需要加cokkie使用下面的請求模式,get請求格式一致 #response = requests.post('http://httpbin.org/post', data=data, cookies=cookies).status_code print (response)

#持續保持同一會話(使用相同的 session)
#coding:utf-8 import requests session = requests.Session()#保持同一會話的核心 session.get('http://httpbin.org/cookies/set/number/12345') response = session.get('http://httpbin.org/cookies') print(response.text)

#證書取消驗證
#coding:utf-8 import requests from requests.packages import urllib3 urllib3.disable_warnings() #從urllib3中消除警告 response = requests.get('https://www.12306.cn',verify=False) #證書驗證設為FALSE print(response.status_code)

#超時異常
import urllib.request response=urllib.request.urlopen('http://httpbin.org/get',timeout=0.1) #設置超時時間為0.1秒,將拋出異常 print(response.read()) #運行結果 #urllib.error.URLError: <urlopen error timed out> import urllib.request from urllib import error import socket try: response=urllib.request.urlopen('http://httpbin.org/get',timeout=0.1) print(response.read()) except error.URLError as e: if isinstance(e.reason, socket.timeout): # 判斷對象是否為類的實例 print(e.reason) # 返回錯誤信息 #運行結果 #timed out 服務返回結果用法 #coding:utf-8 import requests response = requests.get('http://www.baidu.com') print (response.status_code) # 打印狀態碼 print (response.url) # 打印請求url print (response.headers) # 打印頭信息 print (response.cookies) # 打印cookie信息 print (response.text) #以文本形式打印網頁源碼 print (response.content) #以字節流形式打印 上傳文件 >>> import requests >>> url = 'http://httpbin.org/post' >> files = {'file': ('e:\\a.py', open('e:\\a.py', 'rb'), 'application/python','Expires': '0'})} >> r = requests.post(url, files=files) >> r.text 返回json格式結果處理

#coding:utf-8 import requests response = requests.get('http://httpbin.org/get') print (response.text) #返回的是Unicode型的數據 print (response.json()) #response.json()方法同json.loads(response.text) print (u"對返回結果進行json處理之后的類型是: ") print (type(response.json())) Urllib urllib是python內置的HTTP請求庫,無需安裝即可使用,它包含了4個模塊: request:它是最基本的http請求模塊,用來模擬發送請求 error:異常處理模塊,如果出現錯誤可以捕獲這些異常 parse:一個工具模塊,提供了許多URL處理方法,如:拆分、解析、合並等 robotparser:主要用來識別網站的robots.txt文件,然后判斷哪些網站可以爬
URL編碼
#coding:utf-8 from urllib import parse print (parse.quote('http://www.baidu.com')) #未編碼斜杠 print (parse.quote_plus('http://www.baidu.com')) #編碼斜杠

URL參數拼接及get、post請求 #coding:utf-8 import urllib import urllib.parse import urllib.request param={'spam':1,'eggs':2,'bacon':0} print (u"初始參數") print (param) params= urllib.parse.urlencode(param) print (u"編碼后的參數") print (params) url="http://python.org/query?%s" % params print (u"最終get請求") print ('urllib.request.urlopen("http://python.org/query?%s" % params)') print (u"最終post請求方式") print ('urllib.request.urlopen("http://python.org/query",parmas)') 服務器返回結果 # coding: utf-8 import urllib import urllib.request response = urllib.request.urlopen('http://www.baidu.com') print (response.getcode()) #打印狀態碼信息 其方法和response.getcode() 一樣 都是打印當前response的狀態碼 print (response.headers) #打印出響應的頭部信息,內容有服務器類型,時間、文本內容、連接狀態等等 print (response.headers['Server']) #這種拿到響應頭的方式需要加上參數,指定你想要獲取的頭部中那一條數據 print (response.geturl()) #獲取響應的url print (response.readline()) #讀取html頁面第一行 print (response.fileno()) #文件描述符 print (response.read()) #使用read()方法得到響應體內容,這時是一個字節流bytes,看到明文還需要decode為charset格式

帶有header 發送數據 #! /usr/bin/env python3 import urllib.parse import urllib.request url = 'http://httpbin.org/post' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' values = { 'act' : 'login', 'login[email]' : 'abc@abc.com', 'login[password]' : '123456' } headers = { 'User-Agent' : user_agent } data = urllib.parse.urlencode(values) req = urllib.request.Request(url, data.encode("utf-8"), headers) response = urllib.request.urlopen(req) the_page = response.read() print(the_page.decode("utf8"))

異常處理
#! /usr/bin/env python3 from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError req = Request('http://www.python.org/') try: response = urlopen(req) except HTTPError as e: print('The (www.python.org)server couldn\'t fulfill the request.') print('Error code: ', e.code) except URLError as e: print('We failed to reach a server.') print('Reason: ', e.reason) else: print("good!") print(response.read().decode("utf8"))
設定超時時間
import socket import urllib.request # timeout in seconds #timeout = 0.1 #超時的 timeout = 2 socket.setdefaulttimeout(timeout) # this call to urllib.request.urlopen now uses the default timeout # we have set in the socket module req = urllib.request.Request('http://www.python.org/') a = urllib.request.urlopen(req).read()
服務返回結果保存為html
# coding: utf-8 import urllib import urllib.request result=urllib.request.urlretrieve('https://www.cnblogs.com/sysu-blackbear/p/3629420.html',filename="e://pic//baidu.html") print (u"網頁保存文件地址地址: ",result[0]) print (u"網頁內容: ",result[1]) urllib.request.urlcleanup() #清除urllib.urlretrieve產生的緩存 下載一張圖片 方法1: from urllib.request import urlretrieve urlretrieve("http://pic1.win4000.com/pic/b/20/b42b4ca4c5_250_350.jpg", "e:\\pic\\1.jpg") 方法2: from urllib.request import urlretrieve import urllib imgPath="http://pic1.win4000.com/pic/7/8a/1e81de5511_250_350.jpg" pic_content = (urllib.request.urlopen(imgPath)).read() f = open('e:\\pic\\img2.jpg', 'wb') f.write(pic_content) f.close() Urllib2:(python3以后已經合並成了urllib庫) python 3.x中urllib庫和urilib2庫合並成了urllib庫。。 其中urllib2.urlopen()變成了urllib.request.urlopen() urllib2.Request()變成了urllib.request.Request()

 


免責聲明!

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



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