Python 基础网络请求

人生苦短 我用python

开始愉快的享(代)受(码)时间:

urllib 请求:

1) :

  • Urllib是python内置的HTTP请求库
  • response 响应可调用 read() 、readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数
    和 msg 、 version 、 status 、reason 、debuglevel 、 closed 等属性
from urllib import request
# import urllib.request 或者这样写

url = 'http://www.baidu.com'
response = request.urlopen(url)

#print(response.read()) # 返回二进制形式的响应内容
print(type(response.read().decode('utf-8'))) #  读取网页内容 将二进制内容按照utf-8格式解码 生成字符串格式

2):

传参: data 参数是可选的,如果要添加 data ,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 函数可以进行转化,另外如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST

    # coding=utf-8  
    import urllib.parse  
    import urllib.request  

    data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding=  
    'utf8')  
    response = urllib.request.urlopen('http://httpbin.org/post', dat  
    a=data)  
    print(response.read())  

    #  urllib.parse.urlencode() 方法来将参数字典转化为字符串

3):设置添加请求headers

  from urllib import request,parse  
  url = "http://httpbin.org/post"  
  headers = {  
      #伪装一个火狐浏览器  
      "User-Agent":'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',  
      "host":'httpbin.org'  
  }  
  dict = {  
      "name":"Germey"  
  }  
  data = bytes(parse.urlencode(dict),encoding="utf8")  
  req=request.Request(url=url,data=data,headers=headers,method="POST")  # 利用更强大的 Request 类来构建一个请求
  response = request.urlopen(req)  
  print(response.read().decode("utf-8")) 

  # 也可以通过更加灵活的方式添加headers   如:
  # 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')
  # req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')


requests请求:

requests 是一个python的第三方网络请求库 安装方式: < pip install requests>

  • 1):

<基本get>

import requests
 
url = 'https://www.baidu.com/'
response = requests.get(url)

<带参数的get>

import requests
 
url = 'http://httpbin.org/get'
data = {
    'name':'zhangsan',
    'age':'25'
}
response = requests.get(url,params=data)
print(response.url)  #  请求地址
print(response.text) # 字符串数据
print(response.content) #  二进制数据

print(s.headers)  # 响应头
print(response.request.headers) # 请求头
  • 2):

通过post把数据提交到url地址,等同于一字典的形式提交form表单里面的数据

import requests
 
url = 'http://httpbin.org/post'
data = {
    'name':'jack',
    'age':'23'
    }
response = requests.post(url,data=data)
print(response.text)

很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 string 而不是一个dict ,那么数据会被直接发布出去。

 url = '[https://api.github.com/some/endpoint](https://api.github.com/some/endpoint)'  
 data_dict= {'some': 'data'}

 r = requests.post(url,data=json.dumps(data_dict))
或者
 r = requests.post(url, json=data_dict)

  • 3):

requests中 <response.json()> 方法等同于 <json.loads(response.text)>方法

import requests
import json
 
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json())
  • 高级操作

session,自动保存cookies,可以设置请求参数,下次请求自动带上请求参数

import requests
headers = {
    'name': 'zhangsan',
    'age': '18'
}
# response = requests.get('http://httpbin.org/cookies/set/sessioncookie/123456789', headers=headers)

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
response = s.get('http://httpbin.org/cookies', headers=headers)

print(response.text)  # 响应内容
print(s.headers)  # 响应头
print(response.request.headers) # 请求头

打印结果:
# {"cookies":{"sessioncookie":"123456789"}}
# {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
# {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'name': 'zhangsan', 'age': '18', 'Cookie': 'sessioncookie=123456789'}
Python 基础网络请求_第1张图片

你可能感兴趣的:(Python 基础网络请求)