爬虫学习笔记之【请求数据——requests模块】

一、requests模块简介

  • 作用:发送http请求,获取响应数据
  • 优点:相对于urllib模块,requests模块更简洁易懂

二、requests模块常用方法和属性

1、常用方法(发起请求)

(1)get方法

  • 使用方式response = requests.get(url)

  • 常用参数:headers、params、cookies、timeout、proxy、verify

headers请求头

  • 作用:模拟浏览器
  • 构造方式:构造headers字典(‘请求头字段名’:‘字段对应的值’)
  • 使用方法:response = requests.get(url, headers = headers)
  • 常用请求头:[User-Agent]、[Referer]、[Cookie]
  • 非常用请求头:[Content-Type]、[Host]、[Connection]、[Upgrade-Insecure-Requests]、[Authorization]

params携带参数

  • 作用:携带url参数字典
  • 构造方式:构造params字典(‘参数名’:‘参数值’)
  • 使用方法:response = requests.get(url, params = params)
  • params替代方式:直接对含有参数的url发起请求

cookies参数

  • 作用:身份验证
  • 构造方式:构造cookies字典(‘Cookie名’:‘Cookie值’),以; 空格分割每一对键值对
  • 使用方法:response = requests.get(url, cookies)
  • 注意:cookie一般是有过期时间的,一旦过期需要重新获取
  • 将cookie字符串转换为cookies参数所需的字典:
cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')}

timeout超时参数

  • 作用:对请求进行强制要求,必须在特定的时间内返回结果,否则报错
  • 使用方法:response = requests.get(url, timeout = 3),这里timeout=3表示发送请求后,3秒钟内返回响应,否则就抛出异常

proxy代理参数

  • 作用:为了防止频繁向一个域名发送请求导致ip被封,所以我们需要使用代理ip
  • 构造方式:构造proxy字典(‘代理类型’:‘代理类型:ip地址:端口号’)
  • 使用方法:response = requests.get(url, proxies=proxies)

verify忽略CA证书参数

  • 作用:忽略网站的CA证书页面
  • 使用方法:response = requests.get(url,verify=False)
    CA证书页面

(2)post方法

  • 常用场景:登陆注册(post更安全)、传输大量文本内容(post对数据长度没有要求)

  • 使用方式response = requests.post(url, data)

  • 常用参数:data、headers、params、cookies、timeout、proxy、verify

data参数

  • 作用:传递请求的数据
  • 构造方式:构造data字典(‘data名’:‘data值’)
  • 使用方法:response = requests.post(url, data)

其他参数
与get请求一致

2、常用属性(响应对象)

  • response.text str类型的响应文本(解码类型: requests模块自动根据HTTP 头部对响应的编码推测的文本编码)
  • response.content bytes类型的响应文本(解码类型: 没有指定)
  • response.content.decode() 解决中文乱码问题(默认utf-8)
  • response.status_code 响应状态码
  • response.headers 响应头
  • response.url 响应url(有时候响应的url和请求的url并不一致)
  • response.cookies 响应cookie(经过了set-cookie动作,返回cookieJar类型)
# cookieJar类型转换为cookies字典
cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)
  • response.json() 自动将json字符串类型的响应内容转换为python对象(dict or list)
  • response.request.headers 响应对应的请求头
  • response.request._cookies 响应对应的请求cookie(返回cookieJar类型)

三、requests模块常用对象

1、session对象

  • 作用:自动处理cookie,下一次请求会带上前一次的cookie

  • 常用场景:自动处理连续多次请求过程中产生的cookie

  • 使用方式session = requests.session(),session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致

四、实战演练

POST请求——有道翻译

import requests
import json as js

class king(object):
    def __init__(self,word):
        self.url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
        self.headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
        }
        self.word = word
        self.data = {
            'i': self.word,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': '16534734202228',
            'sign': 'a69ac558a76e563a31b6c3a204c8b257',
            'lts': '1653473420222',
            'bv': '25412fa435d3225e27363d5c00ce51ba',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME'
        }
    
    def get_data(self):
        response = requests.post(self.url,data=self.data,headers=self.headers)
        return response.content.decode()
    
    def parse_data(self,data):
        dict_data = js.loads(data)
        print(dict_data['translateResult'][0][0]['tgt'])
    
    def run(self):
        response = self.get_data()
#         print(response)
        self.parse_data(response)

if __name__ == '__main__':
    word = input('请输入要翻译的单词:')
    king = king(word)
    king.run()
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值