Python爬虫篇

状态码

response.status_code获取状态码

200:成功

302:临时转移至新的url

403:Forbidden

404:Not Found

500:Inter Server Error(服务器内部错误)

import requests


if __name__ == '__main__':

    # 1. 定义 URL
    url = "https://www.baidu.com"#200
    # url = "https://www.baidu.com/abc"#404

    # 2. 向 URL 发送请求
    response = requests.get(url)

    # 3. 打印状态码
    print(response.status_code)

编码方式


if __name__ == '__main__':
    """编码"""

    # 网络传输的数据都是字节类型,需要将数据先转换为字节类型

    data_str = "hello world"
    data_bytes = b"hello world"

    print(type(data_str), type(data_bytes))
    # 字符串转字节: encode
    # 字节转字符串: decode
    print(data_str.encode(), type(data_str.encode()))
    print(data_bytes.decode(), type(data_bytes.decode()))
'''
<class 'str'> <class 'bytes'>
b'hello world' <class 'bytes'>
hello world <class 'str'>
'''

响应内容编码

response.text:获取str类型的响应

import requests

if __name__ == '__main__':
    """text 属性用法"""

    # 发送请求
    resopnse = requests.get("https://www.baidu.com")
    print("text 数据类型:", type(resopnse.text))
    # 打印响应内容
    print(resopnse.text)
    # 打印内容的默认编码
    print("默认编码:", resopnse.encoding)
    # ISO-8859-1 是英语国家使用的编码
    # 需要将英语国家使用的 ISO-8859-1 编码转换为支持中文的 utf8 编码
    resopnse.encoding = "utf8"
    print("uft8编码:", resopnse.text)

response.content:获取bytes类型的响应

import requests

if __name__ == '__main__':
    """content 属性用法"""

    # 发送请求
    resopnse = requests.get("https://www.baidu.com")
    # 拿到 content 数据
    print("content 数据类型:", type(resopnse.content))
    # 可以使用字节类型变量的 decode 函数,将其转换为字符串
    print("content 转换为字符串:", resopnse.content.decode())

    # 什么时候需要对 content 变量(属性) decode ?
    # 如果响应的数据本身是字符串,需要 decode
    # 如果响应的数据是图片、音视频文件等等,不需要 decode

推荐使用response.content.decode("utf8")方式获取响应的html界面

response.headers:获取响应头

import requests

if __name__ == '__main__':
    """header 属性"""

    # 发送请求
    resopnse = requests.get("https://www.baidu.com")
    # 打印响应头信息
    print("响应头信息:", resopnse.headers)

response.request:获取响应对应的请求

import requests

if __name__ == '__main__':
    """request 属性"""
    # 发送请求
    resopnse = requests.get("https://www.baidu.com")
    # 打印响应头信息
    print("响应中的请求头信息:", resopnse.request.headers)
'''
响应中的请求头信息: {'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

'''

发送带header的请求

为什么请求需要带header?

                模拟浏览器,欺骗服务器,获取和浏览器一致的内容

如何获取header,步骤如下:

 图1

图2

图3

图4

图5

注意:headers的形式是字典

import requests

if __name__ == '__main__':
    """发送带有 header 的请求"""

    # 发送请求
    url = "https://www.baidu.com"
    '''
    #通过网页查找到的headers
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
    '''
    #网页中的headers要通过字典的形式传入
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
    }

    # 发送带有 User-Agent 头信息的请求
    resopnse = requests.get(url, headers=headers)
    print(resopnse.request.headers)
    print(resopnse.content.decode())

带参数的请求

URL各部分详解

import requests

if __name__ == '__main__':
    # 发送请求
    url = "https://www.baidu.com/s"
    # 构造请求头、参数信息
    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 = {"wd": "python"}

    # 发送带有 User-Agent 头信息的请求
    resopnse = requests.get(url, headers=headers, params=params)
    print(resopnse.content.decode())

    # 将读取到的内容写入文件
    # with open("./python.html", "w") as file:
    #     file.write(resopnse.content.decode())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值