Python爬虫学习之requests的使用教程

  • Post category:http

Python爬虫学习之requests的使用教程

什么是requests

requests是一个Python第三方库,用于简化HTTP请求和响应处理。与Python内置的urllib库相比,requests更加易用和功能强大。使用requests可以快速地发送HTTP请求,处理响应,并处理常见的HTTP异常。

安装requests

在安装requests之前,您需要先安装pip工具。使用pip可以非常方便地安装各种Python库,包括requests。

要安装requests,请以管理员身份打开命令提示符(Windows)或终端(Mac / Linux),然后运行以下命令:

pip install requests

发送HTTP请求

使用requests发送HTTP请求非常简单。要发送一个HTTP GET请求,请使用requests.get()函数。

import requests

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

在上面的示例中,我们向百度发送了一个HTTP GET请求,并打印了响应内容。response.text可以获取响应的HTML源代码。

要发送其他类型的HTTP请求,如POST和PUT,请使用requests.post()和requests.put()函数。

处理HTTP响应

发送HTTP请求后,我们需要处理响应。requests返回的响应对象包含HTTP状态代码,响应头和响应正文等详细信息。

下面是一个处理HTTP响应的示例:

import requests

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

print(response.status_code)  # 打印HTTP状态代码
print(response.headers)  # 打印响应头信息
print(response.text)  # 打印响应正文

处理异常

requests库还提供了异常处理功能,可以处理常见的HTTP异常,例如404错误和连接超时。

下面是一个处理HTTP异常的示例:

import requests

try:
    response = requests.get('http://www.notexist.com', timeout=1)
    print(response.text)
except requests.exceptions.Timeout:
    print('Timeout error')
except requests.exceptions.HTTPError as err:
    print('HTTP error: {0}'.format(err))
except requests.exceptions.RequestException as err:
    print('Other error: {0}'.format(err))

在上面的示例中,我们尝试向一个不存在的网站发送HTTP请求,并为连接超时设置了最长等待时间1秒。如果请求超时,将抛出requests.exceptions.Timeout异常。如果HTTP状态代码为4xx或5xx,将抛出requests.exceptions.HTTPError异常。如果出现其他异常,将抛出requests.exceptions.RequestException异常。

示例1:获取新浪新闻

下面是一个使用requests获取新浪新闻的示例。这个示例将向http://news.sina.com.cn/ 发送HTTP请求,并提取新闻标题和链接,并保存到news.txt文件中。

import requests
from lxml import html

response = requests.get('http://news.sina.com.cn/')
content = response.content
tree = html.fromstring(content)

titles = tree.xpath('//h1[contains(@class,"news-item-hd")]/a/text()')
links = tree.xpath('//h1[contains(@class,"news-item-hd")]/a/@href')

with open('news.txt', 'w', encoding='utf-8') as f:
    for i in range(len(titles)):
        f.write('{0}\t\t{1}\n'.format(titles[i], links[i]))

在上面的示例中,我们首先向http://news.sina.com.cn/ 发送HTTP请求,并使用lxml从HTML源代码中解析出标题和链接。然后我们将标题和链接保存到news.txt文件中。

示例2:模拟登录

下面是一个使用requests模拟登录的示例。这个示例将向一个需要登录才能访问的网站发送HTTP POST请求,并成功登录后访问需要登录权限的页面。

import requests

# 登录信息
payload = {'username': 'your_user_name', 'password': 'your_password'}

# 首先向登录页面发送HTTP GET请求,获取Cookies和Session ID等信息
session = requests.Session()
response = session.get('http://www.example.com/login')

# 然后提交登录表单信息
response = session.post('http://www.example.com/login', data=payload)

# 最后访问需要登录权限的页面
response = session.get('http://www.example.com/members_area')
print(response.text)

在上面的示例中,我们首先向一个需要登录才能访问的网站发送HTTP GET请求,以获取登录页面的Cookies和Session ID等信息。然后,我们使用requests.Session()创建一个会话对象,并使用会话对象发送HTTP POST请求,提交登录表单信息。如果登录成功,我们就可以使用会话对象访问需要登录权限的页面,比如”http://www.example.com/members_area”。

以上是关于requests的详细教程和两个常见的实例。假如您掌握了以上内容,那么您也已经成为了基本的Python爬虫爱好者。