Python学习笔记--Python 爬虫入门 -17-7 requests 献给人类

# Requests-献给人类
- HTTP for Humans,更简洁更友好
- 继承了urllib的所有特征
- 底层使用的是urllib3
- 开源地址: https://github.com/requests/requests
- 中文文档: http://docs.python-requests.org/zh_CN/latest/index.html   
- 安装: conda install requests
- get请求
    - requests.get(url)
    - requests.request("get", url)
    - 可以带有headers和parmas参数
    - 
- get返回内容
    - 
    
- post
    - rsp = requests.post(url, data=data)
    - data, , headers要求dict类型

'''
利用parse模块模拟post请求
分析百度词典
分析步骤:
1. 打开F12
2. 尝试输入单词girl,发现每敲一个字母后都有请求
3. 请求地址是 http://fanyi.baidu.com/sug
4. 利用NetWork-All-Hearders,查看,发现FormData的值是 kw:girl
5. 检查返回内容格式,发现返回的是json格式内容==>需要用到json包
'''

import requests
from urllib import parse
# 负责处理json格式的模块
import json

'''
大致流程是:
1. 利用data构造内容,然后urlopen打开
2. 返回一个json格式的结果
3. 结果就应该是girl的释义
'''

baseurl = 'http://fanyi.baidu.com/sug'


# 存放用来模拟form的数据一定是dict格式
data = {
    # girl是翻译输入的英文内容,应该是由用户输入,此处使用硬编码
    'kw': 'girl'
}

#  我们需要构造一个请求头,请求头部应该至少包含传入的数据的长度
# request要求传入的请求头是一个dict格式

headers = {
    # 因为使用post,至少应该包含content-length 字段
    'Content-Length':str(len(data))
}


# 有了headers,data,url,就可以尝试发出请求了
rsp = requests.post(baseurl, data=data,  headers=headers)

print(rsp.text)
print(rsp.json())


- proxy
   - 
            proxies = {
            "http":"address of proxy",
            "https": "address of proxy"
            }
            
            rsp = requests.request("get", "http:xxxxxx", proxies=proxies)
   - 代理有可能报错,如果使用人数多,考虑安全问题,可能会被强行关闭
   
- 用户验证
    - 代理验证
    
            #可能需要使用HTTP basic Auth, 可以这样
            # 格式为  用户名:密码@代理地址:端口地址
            proxy = { "http": "china:[email protected]:4444"}
            rsp = requests.get("http://baidu.com", proxies=proxy)
- web客户端验证
    - 如果遇到web客户端验证,需要添加auth=(用户名,密码)
    
            autu=("test1", "123456")#授权信息
            rsp = requests.get("http://www.baidu.com", auth=auth)
- cookie
    - requests可以自动处理cookie信息
    
        
              rsp = requests.get("http://xxxxxxxxxxx")
              # 如果对方服务器给传送过来cookie信息,则可以通过反馈的cookie属性得到
              # 返回一个cookiejar实例
              cookiejar = rsp.cookies   
              
              
              #可以讲cookiejar转换成字典
              cookiedict = requests.utils.dict_from_cookiejar(cookiejar)         
    
- session
    - 跟服务器端session不是一个东东
    - 模拟一次会话,从客户端浏览器链接服务器开始,到客户端浏览器断开
    - 能让我们跨请求时保持某些参数,比如在同一个session实例发出的 所有请求之间保持cookie
    
    
            # 创建session对象,可以保持cookie值
            ss = requests.session()
            
            headers = {"User-Agetn":"xxxxxxxxxxxxxxxxxx"}
            
            data = {"name":"xxxxxxxxxxx"}
            
            # 此时,由创建的session管理请求,负责发出请求,
            ss.post("http://www.baidu.com", data=data, headers=headers)
            
            rsp = ss.get("xxxxxxxxxxxx")
            
- https请求验证ssl证书
    - 参数verify负责表示是否需要验证ssL证书,默认是True
    - 如果不需要验证ssl证书,则设置成False表示关闭
    
        
            rsp = requests.get("https://www.baidu.com", verify=False)
            # 如果用verify=True访问12306,会报错??,因为他证书有问题 

猜你喜欢

转载自blog.csdn.net/u013985879/article/details/82557588