网络爬虫基础——【requests】模块详解

一、requests库的介绍和安装

requests是Python中的一个第三方库,它提供了一种简单而优雅的方式,比原生的HTTP请求方式更易于使用。requests是一个Python库,用于发送各种HTTP请求。requests库的安装可以通过pip命令进行,如果有不会下载安装的可以参考我的文章《Python第三方库安装详细教程(图文结合)》,安装代码如下:

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

安装完成后,可以使用import引入requests模块进行使用。引入代码如下:

import requests

二、requests模块的基本使用

requests可以简单、直观地实现HTTP协议中的各种请求功能。下面简单介绍requests模块的基本使用。

1.发送GET请求

在Python中,使用requests发送GET请求非常简单,只需要调用requests模块中的get()函数,以百度首页为例,向百度发起了一个get请求,并返回响应内容,代码如下:

import requests  # 引入第三方库

response = requests.get('https://www.baidu.com')
print(response.text)  # 以文本形式打印响应的内容

2.带参数的GET请求

有时候需要在URL中加上一些参数来完善请求。requests提供了一种简单的方式,即使用params参数传递参数,代码如下:

import requests

url = 'https://www.baidu.com'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
print(response.text)

3.发送POST请求

除了GET请求外,使用requests还可以发送POST请求。发送POST请求时需要设置data参数或json参数,代码如下:

import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.baidu.com', data=data)
print(response.text)

或者,使用json参数:

import requests

json = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.baidu.com', json=json)
print(response.json)

其中,data参数适用于传送表单数据,json参数适用于传送JSON格式的数据。

4.设置请求头信息

在很多情况中,我们都需要进行请求头伪装,需要在请求中添加一些HTTP头信息。设置一个user-agent的请求头来模拟浏览器请求的方式。使用requests时,只需要调用请求对象的headers属性即可添加请求头信息,代码如下:

import requests

headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}
response = requests.get('https://www.baidu.com', headers=headers)
print(response.text)

如果未设置请求头信息,有的网站服务器收到的请求头信息是python-requests/2.28.2,服务器就会拒绝访问,程序抛出异常。

print(response.request.headers)  # 查看服务器收到的请求头信息
# 输出的结果如下:
# {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

5.设置超时时间

有时候在发送请求时会出现等待过长的情况,需要设置超时时间。requests提供了timeout参数来设置超时时间,设置超时时间为3秒,如果超过3秒就会抛出异常。实现代码如下:

import requests

response = requests.get('https://www.baidu.com', timeout=3)
print(response.text)

三、requests模块进阶使用

1.带状态保持的请求

在实际开发中,我们常常需要在一个会话中保持状态。requests提供了session对象来实现带状态保持的请求,代码实现如下:

import requests

session = requests.Session()

session.get('https://www.baidu.com')
response = session.get('https://www.baidu.com/cookies')
print(response.text)

在上面这部分代码中,我们用session对象分别发送了两个请求。第一个请求是普通的GET请求,它会返回一些cookie信息,在第二个请求中我们传入了这些cookie信息,从而实现了带状态保持的请求。

2.文件上传

使用requests也可以实现文件上传功能。在构造POST请求时,我们可以使用files参数来上传文件:

import requests

files = {'file': open('test.txt', 'rb')}
response = requests.post('https://www.baidu.com', files=files)
print(response.text)

3.cookie操作

requests提供了对cookie的支持和操作。使用requests时,我们可以通过cookies属性获取响应中的cookie信息:

import requests

response = requests.get('https://www.baidu.com')
cookies = response.cookies
print(cookies)

通过cookies属性获取的cookie信息可以直接用于下一次请求中的cookies参数。

四、如何使用代理IP

在实际开发中,我们有时候需要使用代理服务器来发送HTTP请求。requests提供了一个proxies参数来实现代理设置,网上提供了很多免费的代理IP,如: https://www.kuaidaili.com/free/,打开如下图:
网络爬虫基础——【requests】模块详解_第1张图片

import requests

proxies = {
  'http': 'http://60.167.20.232:1133',
  'https': 'https://60.167.20.232:1133',
}
response = requests.get('https://www.baidu.com', proxies=proxies)
print(response.text)

在上面这部分代码中,设置了一个代理服务器,使用了proxies参数,将代理服务器的URL传递给了requests.get()函数。(代理有风险,请慎用)

五、requests模块的使用案例

利用模块requests和BeautifulSoup获取彼岸图网站的4K高清图片

import requests
from bs4 import BeautifulSoup

url = 'https://pic.netbian.com/4kyouxi/'
head = {
    'users-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39'
    }
response = requests.get(url = url, headers=head)
response.encoding = 'gbk'
# print(response.text)
print(response.status_code)
soup = BeautifulSoup(response.text,'html.parser')
# 定位到ul
img_url = soup.find('ul',attrs={"class":"clearfix"})
# print(img_url)
# 找到ul下的所有a标签内容,返回列表
a_href = img_url.find_all('a')

# print(a_href)
for href in a_href:
    # 遍历列表,通过get来获取a标签下href属性值
    img_href = 'https://pic.netbian.com' + href.get('href')
    # print(img_href)
    response2 = requests.get(url = img_href,headers=head)
    response2.encoding = 'gbk'
    soup2 = BeautifulSoup(response2.text,'html.parser')
    photo_url = soup2.find('div',class_="photo-pic")
    # print(photo_url)
    # 遍历的url返回多个列表,取每个列表索引号为0的值
    src_url = photo_url.find_all('img')[0]
    # print(src_url)
    new_src = 'https://pic.netbian.com'+ src_url.get('src')
    img_name = new_src.split('/')[-1]
    # print(new_src)
    response3 = requests.get(new_src).content

    with open('D:\\图片\\'+img_name,'wb')as file:
        file.write(response3)
        print("下载成功!")
        break

总结

本篇文章介绍了requests模块的基本用法、进阶用法和一些实际案例。requests是Python中非常常用的HTTP请求模块,用途广泛,不仅可以用于爬虫,也可用于各种网络请求。学习使用requests模块对于Python网络爬虫的入门非常重要。

如果想要深入了解requests模块的更多用法,建议可以去查看它的官方文档,https://docs.python-requests.org/en/latest/ ,其中给出了更加详细的API。


文章对你有帮助的话,麻烦点个赞吧!

你可能感兴趣的:(Python分享,爬虫,python)