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爬虫爱好者。