python爬虫④-----requests高级用法

本文介绍了Python requests库的高级用法,包括设置请求头(如User-Agent、Referer、Host、Origin和Cookie)、配置代理服务器IP以及使用cookie和session。通过示例展示了如何在get和post请求中应用这些设置,强调了session在处理多个请求时保持cookies信息的重要性。

requests高级用法

  1. 设置请求头
  2. 设置代理服务器IP
  3. cookie session

 

设置请求头(headers)

在爬虫操作中,经常需要携带请求头信息(比如User-Agent、Referer、Host、Origin、Cookie)才能正常访问。

  • User-Agent : 浏览器名称,服务器可以知道该请求是从哪个浏览器过来的,在爬虫中经常需要设置这个参数来伪装我们的请求是从浏览器中过来的,这个值也是我们最经常应用的;
  • Referer : 表示当前请求是从哪个url过来的,在有些反爬虫请求中,如果不是从指定页面访问该请求,就不会有相关响应;
  • Host : 标识请求将要达到那台主机,并会在服务端被验证,如果不符合,就不能正确处理客户端的请求;
  • Origin : 说明最初请求是从哪里发起的。Referer显示来源页面的完整地址,而Origin显示来源页面的Origin: protocal+host,不包含路径等信息,也就不会包含含有用户信息的敏感内容,跟Referer相似,但是Origin只能用于post请求。Referer适用于所有请求;因此Origin较Referer更安全,多用于防范CSRF攻击;
  • Cookie : http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息。

get 示例

    # 引入requests库
    import requests
    
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 向指定的url发送请求,并返回
    url = 'https://www.baidu.com/s'
    # 传入参数
    data = {
        'wd': '中国'
    }
    r = requests.get(url=url, params=data, headers=headers)
    print(r.text)

post示例

    # 引入requests库
    import requests
    
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    post_url = 'https://fanyi.baidu.com/sug'
    # 参数
    form_data = {
        'kw': 'baby'
    }
    # 进行post请求
    req = requests.post(url=post_url, data=form_data, headers=headers)
    print('json:', req.json())

 设置代理服务器IP(proxy)

使用requests添加代理也是非常简单,只要在请求方法中(例如requests.get()或者requests.post())传递proxies参数

get示例

    # 引入requests库
    import random
    import requests
    
    # 声明定义代理服务器列表
    proxy_list = [
        {"http": "69.43.252.124:8080"},
        {"http": "69.51.222.39:8080"},
        {"http": "69.157.232.194:8080"}
    ]
    # 随机选择一个代理
    proxy = random.choice(proxy_list)
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 进行GET请求,打印响应结果
    try:
        req = requests.get(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

post示例

    # 引入requests库
    import random
    import requests
    
    # 声明定义代理服务器列表
    proxy_list = [
        {"http": "69.43.252.124:8080"},
        {"http": "69.51.222.39:8080"},
        {"http": "69.157.232.194:8080"}
    ]
    # 随机选择一个代理
    proxy = random.choice(proxy_list)
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 进行POST请求,打印响应结果
    try:
        req = requests.post(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

 cookie session

如果在一个相应中包含了cookie,那么可以利用cookies属性拿到这个返返回的cookie

    # 引入requests库
    import requests
    
    # GET访问
    # 向指定的url发送请求,并返回
    url = 'https://www.baidu.com/'
    # 发送get请求
    req = requests.get(url=url)
    # 响应内容
    print('Cookies信息:', req.cookies)
    print(req.cookies.get_dict())

requests.Session()

在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息。requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies。

示例

    # 引入requests库
    import requests
    
    # 声明定义header
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # 创建session对象
    session = requests.Session()
    # 人人网登陆地址
    post_uel = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019621044248'
    # 参数
    form_data = {
        'email': '132****7095',  # 这是手机号,我隐藏掉中间四位
        'icode': '',
        'origURL': 'http://www.renren.com/home',
        'domain': 'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '01cb55635986f56265d3b55aaddaa79337d094cb56d6cf7724343a93ad586fe7',
        'rkey': 'd5ff51375d8eb17a011cad5622d835fd',
        'f': 'http%3A%2F%2Fwww.renren.com%2F971686685%2Fprofile'
    }
    ret1 = session.post(url=post_uel, headers=headers, data=form_data)
    print('登陆结果:', ret1.json())
    print('*' * 50)
    
    # 人人网个人中心地址
    get_url = 'http://www.renren.com/971686685/profile'
    ret2 = session.get(url=get_url)
    print(ret2.content.decode())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值