• 爬虫(四):requests模块


    1. requests模块

    1.1 requests简介

    requests 是一个功能强大、简单易用的 HTTP 请求库,比起之前用到的urllib模块,requests模块的api更加便捷。(本质就是封装了urllib3)

    可以使用pip install requests命令进行安装,但是很容易出网络问题,所以我找了下国内的镜像源来加速。

    然后就找到了豆瓣的镜像源:

    pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    只要将包名修改一下,就能快速下载模块了。

    1.2 requests请求

    请求方法有很多种,但是我们只讲最常用的两种:GET请求和POST请求。

    1.2.1 GET请求

    GET方法用于向目标网址发送请求,方法返回一个Response响应对象,Response下一小节详细讲解。

    GET方法的参数:

    url:必填,指定请求的URL

    params:字典类型,指定请求参数,常用于发送GET请求时使用

    例子:

    import requests
    url = 'http://www.httpbin.org/get'
    params = {
        'key1':'value1',
        'key2':'value2'
    }
    response = requests.get(url=url,params=params)
    print(response.text)

    结果:

    headers:字典类型,指定请求头部

    例子:

    import requests
    url = 'http://www.httpbin.org/headers'
    headers = {
        'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    print(response.text)

    结果:

    proxies:字典类型,指定使用的代理 

    例子:

    import requests
    url = 'http://www.httpbin.org/ip'
    proxies = {
        'http':'113.116.127.164:8123',
        'http':'113.116.127.164:80'
    }
    response = requests.get(url=url,proxies=proxies)
    print(response.text)

    结果:

    cookies:字典类型,指定Cookie 

    例子:

    import requests
    url = 'http://www.httpbin.org/cookies'
    cookies = {
        'name1':'value1',
        'name2':'value2'
    }
    response = requests.get(url=url,cookies=cookies)
    print(response.text)

    结果:

    auth:元组类型,指定登陆时的账号和密码

    例子:

    import requests
    url = 'http://www.httpbin.org/basic-auth/user/password'
    auth = ('user','password')
    response = requests.get(url=url,auth=auth)
    print(response.text)

    结果:

    verify:布尔类型,指定请求网站时是否需要进行证书验证,默认为 True,表示需要证书验证,假如不希望进行证书验证,则需要设置为False

    import requests
    response = requests.get(url='https://www.httpbin.org/',verify=False)

    结果:

    但是在这种情况下,一般会出现 Warning 提示,因为 Python 希望我们能够使用证书验证。

    如果不希望看到 Warning 信息,可以使用以下命令消除:

    import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    timeout:指定超时时间,若超过指定时间没有获得响应,则抛出异常

    1.2.2 POST请求

    POST请求和GET请求的区别就是POST数据不会出现在地址栏,并且数据的大小没有上限。

    所以GET的参数,POST差不多都可以使用, 除了params参数,POST使用data参数即可。

    data:字典类型,指定表单信息,常用于发送 POST 请求时使用

    例子:

    import requests
    url = 'http://www.httpbin.org/post'
    data = {
        'key1':'value1',
        'key2':'value2'
    }
    response = requests.post(url=url,data=data)
    print(response.text)

    结果:

    1.3  requests响应

    1.3.1 response属性

    使用GET或POST请求后,就会接收到response响应对象,其常用的属性和方法列举如下:

    response.url:返回请求网站的 URL

    response.status_code:返回响应的状态码

    response.encoding:返回响应的编码方式

    response.cookies:返回响应的 Cookie 信息

    response.headers:返回响应头

    response.content:返回 bytes 类型的响应体

    response.text:返回 str 类型的响应体,相当于response.content.decode('utf-8')

    response.json():返回 dict 类型的响应体,相当于json.loads(response.text)

    import requests
    response = requests.get('http://www.httpbin.org/get')
    print(type(response))
    # <class 'requests.models.Response'>
    print(response.url) # 返回请求网站的 URL
    # http://www.httpbin.org/get
    print(response.status_code) # 返回响应的状态码
    # 200
    print(response.encoding) # 返回响应的编码方式
    # None
    print(response.cookies) # 返回响应的 Cookie 信息
    # <RequestsCookieJar[]>
    print(response.headers) # 返回响应头
    # {'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': '*', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Date': 'Mon, 16 Dec 2019 03:16:22 GMT', 'Referrer-Policy': 'no-referrer-when-downgrade', 'Server': 'nginx', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '189', 'Connection': 'keep-alive'}
    print(type(response.content))# 返回 bytes 类型的响应体
    # <class 'bytes'>
    print(type(response.text)) # 返回 str 类型的响应体
    # <class 'str'>
    print(type(response.json())) # 返回 dict 类型的响应体
    # <class 'dict'>

    1.3.2 编码问题

    #编码问题
    import requests
    response=requests.get('http://www.autohome.com/news/')
    # response.encoding='gbk' #汽车之家网站返回的页面内容为gb2312编码的,而requests的默认编码为ISO-8859-1,如果不设置成gbk则中文乱码
    print(response.text)
  • 相关阅读:
    多线程编程核心技术(五)死锁
    SELinux详细配置
    Linux实现RAID
    iSCSi的基本配置
    文本超出省略号之前后省略号实现
    对象冻结
    条件判断的优美写法
    使用VConsole
    重绘和重排(回流)
    移动端rem布局
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12047950.html
Copyright © 2020-2023  润新知