Python爬虫之requests库


前言

随着互联网的快速发展,网络数据提取变得越来越重要。而Python作为一款强大的编程语言,在数据提取方面具有显著的优势。requests库作为Python中常用的HTTP客户端库,为网络数据提取提供了极大的便利。本文将详细介绍requests库的基本使用方法和进阶用法,帮助读者更好地理解和应用requests库。通过本文的学习,读者将能够掌握如何使用requests库发送HTTP请求、处理响应以及处理请求和响应的细节。同时,本文还介绍了requests库在处理网络数据时可能遇到的一些常见问题及解决方案。希望通过本文的介绍,读者能够更好地应用requests库进行网络数据提取,提高工作效率。 点击进入官方文档


1. 简介

requests库是Python中用于发送HTTP请求的常用库。它提供了一种简单而优雅的方式来编写网络请求,无需考虑低级的HTTP细节。requests库可以轻松地发送GET、POST等请求,并处理响应。


2. 安装requests库

使用pip安装requests库:

pip install requests

如果下载比较慢,可以使用清华镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

3. 基本用法

3.1 GET请求

GET请求用于从指定的资源获取数据。以下是一个简单的GET请求示例:
这里我们获取了百度页面的html,并输出。

import requests

response = requests.get('https://www.baidu.com')
response.encoding = 'utf-8'  # 修改编码
print(response.text)  # 输出响应内容

3.2 POST请求

POST请求用于向指定的资源提交数据。以下是一个简单的POST请求示例:
这里我们使用百度翻译作为例子,我们在data里放入time作为要输入的单词,我们可以看到网页返回了time的翻译。

import requests
import json

url = 'https://fanyi.baidu.com/sug'
data = {
    'kw': 'time'
}
response = requests.post(url=url, data=data)

content = response.text

obj = json.loads(content)
print(obj)

在这里插入图片描述


3.3 处理响应

响应对象包含有关HTTP响应的所有信息,例如状态码、响应头和响应体。可以使用status_code属性获取状态码,使用headers属性获取响应头,使用text属性获取响应体文本:

response.status_code:HTTP状态码(例如200、404等)。
response.headers:字典形式的响应头信息。
response.text:响应体的文本内容。对于JSON数据,可以使用response.json()方法将其解析为Python对象。
response.content:响应体的二进制内容。对于文件下载等场景,可以使用此方法获取二进制数据。
response.cookies:响应中的cookies信息。可以通过此属性访问和操作cookies。
response.elapsed:响应所花费的时间(以时间差形式表示)。可以通过此属性了解请求的执行时间。
response.url:最终的URL(即重定向后的URL)。如果进行了重定向,此属性将包含最终的URL地址。通过response.history可以查看请求过程中的重定向历史。此外,还可以使用raise_for_status()方法自动引发一个HTTPError异常,如果HTTP请求返回了不成功的状态码(4xx或5xx)。这可以方便地处理错误情况。


4. 进阶用法

4.1 请求头设置

有时,为了模拟浏览器请求或隐藏爬虫身份,需要设置请求头。requests库提供了headers参数来设置请求头:
这里我们还是使用百度来作为例子。在返回的结果中我们可以看到有百度这样的字

import requests

url = 'https://www.baidu.com'
headers = {'User-Agent':
               'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'}  # 设置请求头
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'  # 修改编码
print(response.text)  # 输出响应内容

在这里插入图片描述


还有4.2 Cookie处理和4.3 Session的使用。
但暂时还没有什么想法,先挖个坑吧,以后再填。

5. 常见问题与解决

超时问题: 如果请求未在合理的时间内返回,可以使用timeout参数设置超时时间。
重定向问题: 如果请求被重定向到其他页面,可以使用allow_redirects参数控制是否允许重定向。默认情况下,requests将自动处理重定向。
SSL证书问题: 在发送请求时可能会遇到SSL证书验证问题。可以通过设置verify参数来指定CA证书路径,或者使用verify=False来禁用证书验证(不推荐)。
编码问题: 响应的文本可能不是UTF-8编码。可以使用encoding参数指定响应的编码方式。例如,encoding='gbk’用于指定GBK编码。
代理问题: 如果需要通过代理访问网络,可以使用proxies参数指定代理服务器地址和端口。例如:proxies={‘http’: ‘http://10.10.1.10:3128’, ‘https’: ‘http://10.10.1.10:1080’}。
异常处理: 在发送请求时可能会遇到各种异常,如HTTPError、ConnectionError等。可以使用try-except块来捕获异常并进行相应处理。
非200状态码: 如果HTTP状态码不是200(即请求失败),可以通过检查response.status_code获取状态码,并相应地处理错误情况。可以使用raise_for_status()方法自动引发HTTPError异常(如果状态码为4xx或5xx)。
非UTF-8响应: 如果响应内容不是UTF-8编码,可以通过设置encoding参数来指定正确的编码方式。例如,encoding='gbk’用于指定GBK编码。
Cookie处理: 如果需要发送Cookie,可以使用cookies参数来传递一个字典形式的Cookie信息。requests库会自动处理Cookie的发送和接收。如果需要使用Session来保持会话状态,可以使用Session对象来简化Cookie的处理。
自动捕获Cookies: 当使用Session对象时,requests会自动捕获并发送Cookies,简化登录等需要保持状态的请求处理。可以通过访问Session对象的cookies属性来获取当前会话的Cookies信息。
HTTP方法选择: requests库支持多种HTTP方法,如GET、POST、PUT、DELETE等。可以通过调用不同的方法来发送不同类型的请求。例如,使用requests.get()发送GET请求,使用requests.post()发送POST请求等。


总结

requests库是一个功能强大的Python HTTP客户端库,它简化了发送HTTP请求的过程,使网络数据提取变得容易。通过requests库,可以轻松地发送GET、POST等请求,处理响应,以及处理请求和响应的细节。在进阶用法中,我们还介绍了如何设置请求头、处理Cookie和利用Session保持会话状态。此外,了解一些常见问题的解决方案对于使用requests库至关重要。尽管requests库功能强大且易于使用,但在处理网络数据时,仍需注意数据的有效性、安全性等问题。


  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值