zoukankan      html  css  js  c++  java
  • requests基础

    爬虫的基本原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的。所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来。这个时候就要用到requests库了。

    1、requests的安装

    requests库本质上就是模拟了我们用浏览器打开一个网页,发起请求是的动作。它能够迅速的把请求的html源文件保存到本地。

    requests安装比较简单,pip install requests

    2、requests的使用

    开始要导入 Requests 模块:

    1 import requests

    然后,尝试获取某个网页。

    1 r = requests.get('https://douban.com')

    现在,有一个名为 r 的Response 对象。可以从这个对象中获取所有我们想要的信息。

    Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。例如,你可以这样发送一个 HTTP POST 请求:

    1 r = requests.post("http://httpbin.org/post")

    其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS 

    1 r = requests.put("http://httpbin.org/put")
    2 r = requests.delete("http://httpbin.org/delete")
    3 r = requests.head("http://httpbin.org/get")
    4 r = requests.options("http://httpbin.org/get")

    传递 URL 参数

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

     1 #这个方法可以接收三个参数,其中第二个默认为None 第三个可选
     2 def get(url, params=None, **kwargs)
     3 #作用是模拟发起GET请求
     4 Sends a GET request.
     5 #模拟获取页面的url链接
     6 :param url: URL for the new :class:Request object. 
     7 #额外参数 字典或字节流格式,可选
     8 :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:Request. 
     9 # 十二个控制访问参数,比如可以自定义header
    10 :param **kwargs: Optional arguments that request takes. 
    11 # 返回一个Response对象
    12 :return: :class:Response <Response> object 
    13 :type: requests.Response

    下面着重讲一下 **kwargs 这个参数

    kwargs: 控制访问的参数,均为可选项
    
    params : 字典或字节序列,作为参数增加到url中
    
    data : 字典、字节序列或文件对象,作为Request的内容 json : JSON格式的数据,作为Request的内容
    
    headers : 字典,HTTP定制头
    
    cookies : 字典或CookieJar,Request中的cookie
    
    auth : 元组,支持HTTP认证功能
    
    files : 字典类型,传输文件
    
    timeout : 设定超时时间,秒为单位
    
    proxies : 字典类型,设定访问代理服务器,可以增加登录认证
    
    allow_redirects : True/False,默认为True,重定向开关
    
    stream : True/False,默认为True,获取内容立即下载开关
    
    verify : True/False,默认为True,认证SSL证书开关
    
    cert : 本地SSL证书路径
    
    url: 拟更新页面的url链接
    
    data: 字典、字节序列或文件,Request的内容
    
    json: JSON格式的数据,Request的内容

    例如:

    1 payload = {'key1': 'value1', 'key2': 'value2'}
    2 r = requests.get("http://httpbin.org/get", params=payload)
    3 
    4 #结果
    5 print(r.url)
    6 http://httpbin.org/get?key2=value2&key1=value1

    注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

    还可以将一个列表作为值传入:

    1 payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
    2 
    3 r = requests.get('http://httpbin.org/get', params=payload)
    4 print(r.url)
    5 http://httpbin.org/get?key1=value1&key2=value2&key2=value3

    响应内容:

    我们能读取服务器响应的内容。

    requests.Response

    • status_code状态码
    • headers应答的http头
    • json应答的json数据
    • text应答的Unicode编码的文本
    • content应答的字节流数据
    • cookies应答的cookies.自动处理。

    常用的两个控制访问参数:

    a. 假设我们需要在GET请求里自定义一个header头文件:

     1 import requests
     2 
     3 hd = {'User-agent':'123'}
     4 r = requests.get('http://www.baidu.com', headers=hd)
     5 print(r.request.headers)
     6 '''
     7 OUT:
     8 {'User-agent': '123', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive
     9 '}
    10 '''

    b. 假设我们要自定义一个代理池

    1 pxs = { 'http': 'http://user:pass@10.10.10.1:1234',
    2         'https': 'https://10.10.10.1:4321' }
    3 r = requests.get('http://www.baidu.com', proxies=pxs)

    3、requests抓取网页的通用框架

     1 import requests
     2 
     3 def getHtmlText(url):
     4     try:
     5         r = requests.get(url, timeout=30)
     6         # 如果状态码不是200 则应发HTTOError异常
     7         r.raise_for_status()
     8         # 设置正确的编码方式
     9         r.encoding = r.apparent_encoding
    10         return r.text
    11     except:
    12         return "Something Wrong!"
  • 相关阅读:
    C++: Ctor
    C++: RVO( return value optimization)
    alg_DP: LCS ( longest common substring )
    C++: TypeList
    android sdk入门(1)
    Ext.net 动态生成控件
    MVC常用控件
    学习MVC第一个增删修功能的本记
    学习MVC第二个实例登录代码(Model数据验证)
    在asp.net中使用自定义事件(带参数)
  • 原文地址:https://www.cnblogs.com/freeman818/p/7077433.html
Copyright © 2011-2022 走看看