美文网首页
requests模块

requests模块

作者: 无心文先森 | 来源:发表于2020-04-27 13:11 被阅读0次

    为什么要学习requests,而不是urllib

    • requests的底层实现就是urllib
    • requests在python2 和python3中通用,方法完全一样
    • requests简单易用
    • Requests能够自动帮助我们解压(gzip压缩的等)网页内容
    • 作用:发送网络请求,返回响应数据
    • 中文文档 API: http://docs.python-requests.org/zh_CN/latest/index.html

    安装方式

    利用 pip 安装 或者利用 easy_install 都可以完成安装:

    • pip install requests
    • easy_install requests
    • 安装第三方模块
      • pip install 模块名
      • 下载源码解码,进入解压后的目录python setup.py install
      • ***.whl 安装方法 pip install ***.whl

    基本GET请求

    添加 headers 和 查询参数

    如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用 params 参数。

    kw = {'wd':'长城'}  
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}  
    #params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()  
    response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
    

    response的常用方法:

    • response.text
    • respones.content
    • response.status_code
    • response.encoding
    • response.request.headers
    • response.headers
    • response.url

    response.text 和response.content的区别

    • response.text
      类型:str
      解码类型: 根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
      如何修改编码方式:response.encoding=”gbk”
    • response.content
      类型:bytes
      解码类型: 没有指定
      如何修改编码方式:response.content.deocde(“utf8”)
    • 使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。
    • 使用response.content 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
    • 更推荐使用response.content.deocde()的方式获取响应的html页面

    为什么请求需要带上header?

    • 模拟浏览器,欺骗服务器,获取和浏览器一致的内容
      header的形式:字典
      headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
      用法: requests.get(url,headers=headers)

    发送带参数的请求

    什么叫做请求参数
    列1: http://www.webkaka.com/tutorial/server/2015/021013/
    例2: https://www.baidu.com/s?wd=python&c=b
    参数的形式:字典
    kw = {'wd':'长城'}
    用法:requests.get(url,params=kw)

    基本POST请求

    哪些地方我们会用到POST请求:

    • 登录注册( POST 比 GET 更安全)
    • 需要传输大文本内容的时候( POST 请求对数据长度没有要求)
    • 所以同样的,我们的爬虫也需要在这两个地方会去模拟浏览器发送post请求

    最基本post方法

    传入data数据

    对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数

    import requests
    formdata = {
      "type":"AUTO",
      "i":"i love python",
      "doctype":"json",
      "xmlVersion":"1.8",
      "keyfrom":"fanyi.web",
      "ue":"UTF-8",
      "action":"FY_BY_ENTER",
      "typoResult":"true"
    }
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
    headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    response = requests.post(url, data = formdata, headers = headers)
    print (response.text)
    # 如果是json文件可以直接显示
    print (response.json())
    

    寻找登录的post地址

    • 在form表单中寻找action对应的URL地址
      • post的数据是input标签中name的值作为键,真正的用户名密码作为值的字典,post的URL地址就是
        action对应的URL地址

      • 抓包,寻找登录的url地址

        • 勾选perserve log按钮,防止页面跳转找不到URL
        • 寻找post数据,确定参数
          • 参数不会变,直接用,比如密码不是动态加密的时候
          • 参数会变
            • 参数在当前的响应中
            • 通过js生成

    定位想要的js

    • 选择会触发js事件的按钮,点击event listener 找到js的位置
    • 通过chorme中的search all file来搜索url中关键字

    相关文章

      网友评论

          本文标题:requests模块

          本文链接:https://www.haomeiwen.com/subject/cpeywhtx.html