request库

1 安装

pip install requests

2 主要的方法

requests.request()  支撑所有的基础方法
requests.get()      
requests.head()
requests.post()
requests.put()
requests.patch()
requests.delete()

3 get方法

r = requests.get( url )

    r是一个Response对象, 包含爬虫返回的内容

    url的Request

  requests.get(url, params=None, **kwargs)

  基本操作方法

import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)

4 Response对象属性

  status_code

    HTTP请求的返回状态, 200表示成功

  text

    页面内容

  encoding

    根据header猜测的内容编码方式

  apparent_encoding

    从内容中分析出来的编码方式

  content

    HTTP相应的二进制形式

5 Requests库的异常

  ConnectionError

    网络链接错误, 例如DNS查询失败, 拒绝链接等

  HTTPError

    HTTP错误

  URLRequires

    冲过最大重定向次数

  ConnectTimeout

    链接超时异常, 仅仅是链接的时候的时间超出

  Timeout

    url请求超时, 是这个过程的时间超出

6 通用代码框架  

  通用代码框架如下

  注意: 该文件不能命名为requests.py

import requests


def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"


if __name__ == "__main__":
    url = "http://www.python.org"
    print(getHTMLText(url))

7 HTTP协议

  HTTP超文本传输协议

  URL格式:

    http://host[:port][path]

    host是合法的主机域名或者IP地址

    port是端口, 默认是80

    path是资源路径

  对资源的操作

    GET 获取资源

    HEAD 获得资源的相应消息报告, 也就是资源的头部

    POST 请求资源后附加的新数据

    PUT 存储一个资源, 覆盖原资源(全部更新)

    PATCH 局部更新

    DELETE 删除资源

  

  requests库的方法对应的就是HTTP的操作

8 requests库方法详解

  requests库的核心方法是 requests.request()方法

  

  其中method就是对应的 GET; HEAD; POST; PUT; PATCH; DELETE; OPTIONS

    其中的OPTIONS是用于与服务器交互获得配置的方法

  关于kwargs

    params = 字典, 字节序列

      该params会拆解成键值对放到url之后当做提交的参数

    data = 字典, 字节序列, 文件对象

      作为requests的内容

    json = json格式数据

      作为requests的内容

    headers = 字典

      HTTP定制头部, 诸如修改user-agent来伪装成某个浏览器

    auth = 元组

      支持HTTP的认证功能

    files = 字典

      传输文件

    timeout = 数字

      超时时间, 秒为单位

    proxies = 字典类型

      设定访问的代理服务器, 增加登录认证

    allow_redirects = True/False

      重定向开关, 默认True

    stream = True/False

       内容立即下载开关, 默认True

    verify = True/False

      认证ssl证书开关, 默认True

    cert 本地ssl证书路径

  其余的方法只是将常用的参数设为默认参数了, 基本使用功能不变

    get(url, params=None, **kwargs):

    head(url, **kwargs):

    post(url, data=None, json=None, **kwargs):

    put(url, data=None, **kwargs):

    patch(url, data=None, **kwargs):

    delete(url, **kwargs):

    options(url, **kwargs):

9 利用requests库的小程序

  最基本的获取京东某MAC的页面

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests
url = "https://item.jd.com/2060618.html"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")

  设置User-Agent来突破网站的限制

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests

url = "https://www.amazon.cn/Kindle%E7%94%B5%E5%AD%90%E4%B9%A6/b/ref=sv_kinc_3?ie=UTF8&node=116169071"

try:
    kv = {'user-agent':'Mozilla/5.0'}
    r = requests.get(url, headers=kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失败")

  通过分析网站的链接形式, 得到网站的 网站+参数 的格式

  利用get()方法中的params来设置传入的参数

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests

keyword = "Python"
url = "http://www.baidu.com/s"

try:
    kv = {'wd': keyword}
    r = requests.get(url, params=kv)
    r.raise_for_status()
    print(len(r.text))
except:
    print("爬取失败")

  利用requests库来下载图片

  要点是找到网络图片的地址

  获得的requests对象的content值就是文件的内容

  通过rb的读写模式可以实现文件的存储

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests
import os

url = "http://edu-image.nosdn.127.net/3321D6673EB82C94D08E1B80E8344166.jpg"
root = "F://"
path = root + url.split('/')[-1]

try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(path):
        r = requests.get(url)
        with open(path, 'wb') as f:
            f.write(r.content)
            f.close()
            print("保存文件成功")
    else:
        print("文件已存在")
except:
    print("爬取失败")

  

人若有恒 无所不成
原文地址:https://www.cnblogs.com/weihuchao/p/6676176.html