02. request模块

发布时间 2023-10-07 19:37:38作者: 夏冰翎

一、什么是request模块

  requests 模块是基于代码实现发送网络请求。该模块的作用是模拟浏览器发请求。Python 中默认不带有 requests 模块,我们可以通过 pip 来安装。

pip install requests

二、request模块的基本使用

2.1、什么是UA伪装

  UA 检测 是指门户网站的服务器会检测请求对应请求的身份标识,如果检测到请求的载体标识为某一款浏览器,说明该请求是一个正常的请求(用户通过浏览器发起的请求)。但是,如果检测到请求的载体身份标识不是基于某一款浏览器的,则表示该请求为不正常的请求(爬虫程序发起的请求),则服务器很有很能拒绝该次请求。
  因此,我们需要将爬虫程序对应的请求载体伪装成某一款浏览器,这就是 UA 伪装

2.2、requests模块发送GET请求

import requests

if __name__ == "__main__":
    # 1.指定URL
    url = "https://www.sogou.com/web"

    # 处理URL携带的参数:封装到字典中
    kw = input("enter a key word:")
    param = {
        'query': kw
    }

    # UA:User-Ageng(请求载体的身份标识)
    # UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43",
    }

    # 2.发起请求,get()方法会返回一个响应对象
    # 对指定的URL发起的请求对应的URL是携带参数的,并且请求过程中处理了参数
    response = requests.get(url=url, params=param, headers=headers)

    # 3.获取响应数据,text返回的是字符串形式的响应数据
    page_text = response.text
    print(type(page_text))

    # 4.持久化存储
    file_name = f"{kw}.html"
    with open(file_name, "w", encoding="utf-8") as f:
        f.write(page_text)

    print(f"{file_name}保存成功")

2.2、requests模块发送POST请求

import requests
import json

if __name__ == "__main__":
    # 1.指定URL
    url = "https://fanyi.baidu.com/sug"

    # 处理URL携带的参数:封装到字典中
    word = input("enter a key word:")
    data = {
        'kw': word
    }

    # UA:User-Ageng(请求载体的身份标识)
    # UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43",
    }

    # 2.发起请求,post()方法会返回一个响应对象
    # 对指定的URL发起的请求对应的URL是携带参数的,并且请求过程中处理了参数
    response = requests.post(url=url, data=data, headers=headers)

    # 3.获取响应数据,json()返回的是对象
    # 如果确认响应数据是json类型的,才可以使用json()方法返回
    dict_obj = response.json()
    print(type(dict_obj))

    # 4.持久化存储
    file_name = f"{word}.json"
    with open(file_name, mode="w", encoding="utf-8") as f:
        json.dump(dict_obj, fp=f, ensure_ascii=False)

    print(f"{file_name}保存成功")