美文网首页
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