03. requests库介绍

文章介绍了如何使用Python的requests库进行网络请求,包括发送GET请求获取响应对象,访问URL并打印响应的状态码、头部信息和内容。同时,讨论了用户代理(User-Agent)的角色,解释了为何在爬虫中设置User-Agent以模拟浏览器行为以避免被识别为爬虫,并提供了设置User-Agent的代码示例。
摘要由CSDN通过智能技术生成

3.1requests库的使用

第三方模块导入:pip install requests -i https://pypi.doubanio.com/simple

爬虫:模拟客户端 发送网络请求 获取响应
在python当中,我们就使用第三方库requests去发送网络请求
代码段如下:
下面展示一些 内联代码片


# import requests
#
# # 程序入口(可写可不写,忘记了作用的,可以回顾基础班的内容(模块和包的部分))
# if __name__ == '__main__':
#     # 1.确认目标的url   注意点,url从network里面寻找,因为网页是由network里面所有的数据包构成的
#     url_ = "https://www.baidu.com/"    # 字符串的方式进行呈现
#
#     # 2.发送网络请求,得到响应对象
#     response_ = requests.get(url_)    # 目标的url  利用requests库发送网络请求,最终得到一个响应对象response
#     print(response_)    # 响应对象   对象的形式
#     # 3.解析数据
#     # 仅仅拿到响应对象没有用,我们要的是里面的数据
#     # print(response_.text) # 得到该url对应的响应代码(数据)
#     # print(type(response_.text))  # 响应response的text属性 得到的是string字符串类型的数据
#
#     print(response_.content)     #  得到该url对应的响应代码(数据)
#     print(type(response_.content)) # 响应response的content属性 得到的是bytes字节类型的数据
#     # 4.保存




3.2 响应response里面的其他属性

下面展示一些 response里面的其他属性

response.text 响应体 str类型
respones.content 响应体 bytes类型
response.status_code 响应状态码
response.request.headers 响应对应的请求头
response.headers 响应头
response.request.cookies 响应对应请求的cookie
response.cookies 响应的cookie(经过了set-cookie动作)

下面展示 response属性使用示例。


import requests

if __name__ == '__main__':
    # 1.确认需要的数据的url,需要是一个字符串
    url_ = "https://www.baidu.com/"

    # 2.发送网络请求,获取响应对象
    response = requests.get(url_)


    # response.status_code 响应状态码 200请求成功 301跳转  404页面找不到 500服务器出现了错误
     print(response.status_code)

    # response.request.headers 响应对应的请求头(重点)
     print(response.request.headers)   # 响应对象里面还包含了我们的请求信息(已经被服务端解析过了一次的请求信息)

    # 代表着百度的服务器已经知道了我们是一个python爬虫,已经被识别了是一个爬虫程序
    # 'User-Agent': 'python-requests/2.24.0'

    # 正常的使用浏览器访问,用户代理(代表请求者的身份)(重点)
    # User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36

    # response.headers 响应头
     print(response.headers)

    # response.request._cookies 响应对应请求的cookie(了解)
     print(response.request._cookies)   # 这是一个CookieJar的对象

    # response.cookies 响应的cookie(经过了set-cookie动作)
     print(response.cookies)

3.3 用户代理

3.3.1 使用用户代理的目的–隐藏爬虫身份

# 我们使用爬虫去访问百度首页,其实已经是被检测到了是爬虫身份
"""
百度首页已经知道了我们是爬虫程序的情况下,为啥还是给我们返回了数据
1.拒绝我们的访问 
2.数据不重要的话
3.返回给你假数据
"""

# import requests
#
# if __name__ == '__main__':
#     # 1.确认需要的数据的url,需要是一个字符串
#     url_ = "https://www.baidu.com/"
#
#     # 2.发送网络请求,获取响应对象
#     response_ = requests.get(url_)
#
#     # 2.1 取到里面的数据
#     bytes_data = response_.content   # bytes_data存放的就是响应的字节数据
#
#     # 2.2. 解码 把字节数据解码成字符串类型的数据
#     str_data = bytes_data.decode('utf-8')
#
#     # 如果写入的是str类型出现了乱码,encoding="utf-8"
#     with open('baidu_04.html','w',encoding="utf-8") as f:
#         f.write(str_data)


# 经过对比,发现数据少了
# 因为我们已经被识别成了一个爬虫程序
# 尽可以地模拟正常用户,模拟客户端(浏览器)去发送请求
# 'python-requests/2.24.0'
# 解决办法,隐藏爬虫身份'python-requests/2.24.0'
# 正常用户的脸:
#    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36

3.3.2用户代理使用示例

下面展示一些 内联代码片

import requests

if __name__ == '__main__':
    # 1.确认需要的数据的url,需要是一个字符串
    url_ = "https://www.baidu.com/"

    # 实现User-Agent:用户代理,隐藏爬虫身份,使用正常浏览器的身份
    headers_ = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36"}
    # 2.发送网络请求,获取响应对象
    response_ = requests.get(url_,headers=headers_)

    # 2.1 取到里面的数据
    bytes_data = response_.content   # bytes_data存放的就是响应的字节数据

    # 2.2. 解码 把字节数据解码成字符串类型的数据
    str_data = bytes_data.decode('utf-8')

    # 如果写入的是str类型出现了乱码,encoding="utf-8"
    with open('baidu_05.html', 'w', encoding="utf-8") as f:
        f.write(str_data)

注意:
User-Agent
1.对于服务端来说,反爬点
2.对于爬虫来说,它是模拟正常用户的其中一个部分
User-Agent用户代理只是其中一个

番外:

1.程序入口的使用:

if name == ‘main’:的作用
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。

因此 if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。举例说明如下:

  • 直接执行情况:
    在这里插入图片描述 在这里插入图片描述
    直接执行 test.py,结果如下图,可以成功 print 两行字符串。即,if name==“main”: 语句之前和之后的代码都被执行。

  • import 执行情况:
    然后在同一文件夹新建名称为 import_test.py 的脚本,输入如下代码:
    在这里插入图片描述

执行 import_test.py 脚本,输出结果如下:

在这里插入图片描述

只输出了第一行字符串。即,if name==“main”: 之前的语句被执行,之后的没有被执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<REAL>和光同尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值