Python requests 模块的使用

一、安装 requests 模块

pip install requests

二、使用模块

import requests as req

''' 1、GET,POST的基本语法 '''
# GET请求
response = req.get(url,params,kwargs)
# 例子:req.get(url,params={'wd':'百度'},headers=headers) # headers:字典

# POST请求
response = req.post(url,data,json,kwargs)
# 例子:req.post(urlfy,data={'wd':'百度'},headers=headers) # headers:字典

''' 2、req.request 使用 '''

proxies={'http/https':'代理服务器地址'}
# headers 包含但不限于这些内容
headers={
    'Referer': '访问此网页前一个页面',
    'User-Agent': '计算机、浏览器信息',
    'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Cookie':'Cookie信息',
    'Content-Type': 'application/x-www-form-urlencoded',
}
req.request(
    method='请求的模式',
    url='url',
    params={key:value},# get请求内容
    data={'wd':'百度'},# post请求体内容 'key=value&key1=value1'
    headers=headers,
    json={'已json字符串格式发起请求'}, # post请求
    proxies=proxies, # 代理服务器设置
    files={
        f1:open('文件名',模式),
        f2:('上传后的文件名',open('文件名',模式)),
    },# 上次文件
    auth=HttpBasioAuth('用户名','密码'),# 认证登录信息加密 自动把用户名密码放在请求头中进行提交
    timeout=('发送时间','接收时间'),# 延迟时间
    allow_redirects=True/False,# 是否允许重定向
    stream=True/False,# 下载文件大小配置 False:下载全部;True:分段下载
    cert=('证书地址.crt','证书地址.key'),# SSL证书
    verfily=True/False,# 是否忽略SSL证书 False 忽略;True 不忽略  
)

'''
    ps:如果post提交的数据中有字典嵌套字典,用json进行数据提交,data字典中不能嵌套字典
'''

2.1、GET请求的使用

import requests

''' 1、GET方法的使用 '''

''' 1.1、设置请求头 kwargs '''
url = 'https://www.baidu.com/s'
headers = {'user-agent': 'my-app/0.0.1'}
r = req.get(url, headers=headers)

''' 1.2、设置 params '''
url = 'https://www.baidu.com/s'
headers = {'user-agent': 'my-app/0.0.1'}
r = req.get(url,pramas={'wd':'百度'},headers=headers)

# r.text 获取到响应的内容
print(r.text) # 字符串
print(r.content) # 二进制
print(r.decode('utf8')) # 解码二进制

2.2、POST请求

''' 1、POST方法的使用 '''

import requests as req
import json

headers = {'Content-Type': 'application/x-www-form-urlencoded',
           'Accept': '*/*',
           'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
           'Accept-Encoding': 'gzip, deflate, br',
           'Accept-Language': 'zh-CN,zh;q=0.9',
           'Connection': 'keep-alive',
           }

urlfy = 'https://fanyi.baidu.com/basetrans'
data = {'query': '蜘蛛', 'from': 'zh', 'to': 'en'} # 请求的数据

fanyi = req.post(urlfy,data=data,headers=headers)


print(fanyi.request.url)
json_data = json.loads(fanyi.content.decode('utf-8')) # 把json字符串转换成字典
json_data2 = json.dumps(json_data) # 把字典换成json字符串转

2.3、实用方法

# 获取解析内容的字符集
print(r.encoding)

# 获取响应的字符集
print(r.apparent_encoding)

# 获取状态码
print(r.status_code)

# 获取请求头
print(r.request.headers)

# 获取响应头
print(r.headers)

# 获取响应的url
print(r.url)

# 获取请求的url
print(r.request.url)

# 获取 cookies 信息
print(r.cookies.get_dict())

# r.text 获取到响应的内容
print(r.text) # 字符串
print(r.content) # 二进制
print(r.decode('utf8')) # 解码二进制

3、解析url地址库

# 解析url用的类库:
# python2版本:      
from urlparse import urlparse
import urllib

# python3版本:    
from urllib.parse import urlparse
import urllib.request

# 使用方法
urldata = 'http://www.baidu.com/s/api.php?action=query&ctitle=FA'
result = urlparse.urlparse(urldata)
print result
print urlparse.parse_qs(result.query)

# 输出:
ParseResult(scheme='http', netloc='www.baidu.com', path='/s/api.php', params='', query='action=query&ctitle=FA', fragment='')
{'action': ['query'], 'ctitle': ['FA']}

4、代理服务器的使用

''' 1、使用代理的方法 '''
proxies = {'http':'http://218.22.102.107:80'}
headers = {'user-agent': 'my-app/0.0.1'}
url = 'http://www.baidu.com'
req.get(url,proxies=proxies,headers=headers)
req.post(url,proxies=proxies,headers=headers)

4.1、代理服务器的使用思路

准备一堆的IP地址,组成IP池,然后随机悬着其中的IP进行使用

如何随机选择IP,让使用次数较少的IP地址有更大的可能被使用

-- {'IP':'ip地址','times':0}

-- [{},{},{}],对列表中的ip地址进行排序,按照使用的次数进行排序处理

-- 选择使用次数较少的若干个IP,进行随机选取使用

检测IP的可用性,使用代理IP地址时,会有很多请求时间比较长的IP,这些IP不适合使用,必须判断删除。

-- 可以使用requests添加超时参数,判断ip地址的质量

5、requests 处理 cookies session 

import requests

# 实例化 session 方法
session = requests.session()
''' 
    实现登录的思想:
        1、先用session发送请求到需要登录的网站,session自动保存cookies信息;
        2、再利用session发送请求去登录网站,session会自动携带上刚刚的cookies信息去登录到网站。
    不发送cookies信息登录网站:
        1、返回时间过慢
        2、在cookies过期之前
    获取登录后页面的3种方式:
        1、实例化session
        2、headers 中添加 cookies 字符串
        3、在请求方法中添加 cookies 参数字典
'''
session.post(url,data=data)
session.get(url,pramas=pramas)
session.request(
        # 与 requests.request() 一样
)

猜你喜欢

转载自blog.csdn.net/u011146423/article/details/82957881