您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页Python爬虫之路(7)--requests库的使用以及三种参数

Python爬虫之路(7)--requests库的使用以及三种参数

来源:爱玩科技网

requests库的使用以及三种请求参数

一、前言

在前面的文章当中,我们已经讲解了两个案例,这篇文章我将从requests库的使用以及三种请求参数进行一些知识上的补充。

二、requests基本用法

requests 库是一个优秀的 Python 第三方库,它简化了 HTTP 请求的发送过程,并提供了丰富的功能。下面让我们详细看看它的用法:

 import requests
 ​
 url = "https://www.baidu.com/"
 ​
 params={
     'tn': '680101_16_pg',
 }
 _headers = {
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win; x) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
 }
 ​
 resp = requests.get(url,headers=_headers,params=params,timeout=10)

参数解析:

  • url:要抓取的 url 地址。
  • headers:用于包装请求头信息(一般情况下推荐全部写入)。
  • params:请求时携带的查询字符串参数。(下文讲解)
  • timeout:超时时间,超过时间会抛出异常。可以是一个浮点数,表示总体超时时间。也可以传递一个元组,第一个值表示连接超时,第二个值表示读取超时。例如 timeout=(5.0, 30.0) 表示连接超时 5 秒,读取超时 30 秒。

请求头就是发送请求时,携带的信息

 print("这是resp: ",resp)
 print("这是resp.status_code: ",resp.status_code)
 print("这是resp.encoding: ",resp.encoding)
 print("\n\n这是resp.text: ",resp.text)
 print("\n\n这是resp.content: ",resp.content)

上面没有提到的一些有用的属性和方法:

  • resp.headers: 以字典形式返回响应头。
  • resp.json(): 如果响应的内容是 JSON 格式,可以使用这个方法直接解析为 Python 对象。
  • resp.cookies: 以 RequestsCookieJar 对象的形式返回响应的 cookies。
  • resp.url: 返回最终的 URL 地址,可能与原始请求的 URL 不同(比如发生了重定向)。
  • resp.history: 返回请求历史,如果有重定向的话。

请求头:

 headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win; x) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
 }
 response = requests.get('https://www.example.com', headers=headers)

文件上传:

 files = {'file': open('example.jpg', 'rb')}
 response = requests.post('https://www.example.com/upload', files=files)

Cookie 管理:

cookie是网站对你进行身份校验的一个字段,当你访问一些必须登录的页面时,他就不可忽略。

 # 发送请求并保存 Cookies
 response = requests.get('https://www.example.com')
 cookies = response.cookies
 ​
 # 使用 Cookies 发送后续请求
 response = requests.get('https://www.example.com/protected', cookies=cookies)

会话管理:

有些URL需要进行身份校验,而session就可以实现登录功能,但是我更推荐的方式是将登录之后的cookie加入到请求头中。

 session = requests.Session()
 session.auth = ('username', 'password')
 response = session.get('https://www.example.com/protected')
  1. 异常处理:

     try:
         response = requests.get('https://www.example.com', timeout=5)
     except requests.exceptions.Timeout:
         print('Request timed out')
     except requests.exceptions.RequestException as e:
         print(f'An error occurred: {e}')
    

post请求在上篇文章详细讲过,不在赘述。下面给出一个示例。

 import requests
 #百度翻译
 url = 'https://fanyi.baidu.com'
 #post请求体携带的参数,可通过开发者调试工具查看
 #查看步骤:NetWork选项->Headers选项->Form Data
 data = {'from': 'zh',
         'to': 'en',
         'query': '你好'
         }
 response = requests.post(url, data=data)
 print(response)

三、请求参数

requests 库支持三种类型的请求参数

  • URL 参数:

例如百度搜索的界面:

此时的url如上图所示。同时也可以看到请求方式为get请求。

在负载中,我们也可以查看这些url参数信息信息

从上面的字段中,我们不难发现,wd就是我们搜索时候的输入值。

那么如何请求呢,下面就是一个示例。

方法1:直接使用完整的url请求

import requests


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win; x) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
}

url = 'http://www.baidu.com/s?wd=G.E.M.%E9%82%93%E7%B4%AB%E6%A3%8B&rsv_spt=1&rsv_iqid=0xe5d6b2cc00001bc2&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=680101_16_pg&rsv_enter=1&rsv_dl=tb&oq=G%2526gt%253BM&rsv_btype=t&inputT=3373&rsv_t=eee1C7sFt%2BmVRpzKgxMwjkisut2upt%2B4YyoV7I2WYhBXX1ZbRnpJ01O5MkUrvCh3yq31b%2FM&rsv_sug3=14&rsv_sug1=9&rsv_sug7=100&rsv_pq=e6cbae7a0014dda1&rsv_sug2=0&rsv_sug4=4450'

response = requests.get(url,headers=headers)
response.encoding = 'utf-8'
print(response.text)

方法二:将 URL中?后面的参数拆出来请求

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win; x) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
}
params = {
    'wd': 'G.E.M.邓紫棋',
}

response = requests.get(url='http://www.baidu.com/s',params=params,headers=headers)
response.encoding = 'utf-8'
print(response.text)

上文两种方法都可以正常请求。

ps:这里请注意,百度的url是https请求的时候会返回百度验证,这点将URL中的https改为http就可以正常使用了。

  • 表单参数:

    在上文具体将结果如何使用,大家可以去参考一下。下面给出一个简单的示例。

    data = {'username': 'admin', 'password': 'password'}
    response = requests.post('https://www.example.com/login', data=data)
    
  • JSON 参数:

    json参数大部分我们会使用上面的表单参数形式进行传递。

    json_data = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post('https://www.example.com/api/create', json=json_data)
    

以上就是 requests 库的基本用法和常见场景。三种主要的请求参数类型分别是:

  1. URL 参数: 用于在 URL 中传递参数。在后端中也称为Query参数。
  2. 表单参数: 用于在 POST 请求的请求体中传递参数。
  3. JSON 参数: 用于在 POST 请求的请求体中传递 JSON 格式的数据。
  4. 其他参数:形如http://xxx.com/blog/17的URL格式,那串数字( 17 )往往是一个Path参数,也成为Param参数。

四、结语

根据具体的需求,您可以选择合适的参数类型来发送请求。requests 库提供了非常灵活和强大的功能,可以帮助您轻松地完成各种 HTTP 请求操作。


有任何问题欢迎大家的评论和指正。再次声明,本专栏只做技术探讨,严谨商用,恶意攻击等。

这是我的 GitHub 主页: https://github.com/rosyrain,里面有一些我学习时候的笔记或者代码。本专栏的文档和源码存到spider-course的仓库下。

欢迎大家Follow/Star/Fork三连。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务