Python 爬虫入门(六)第一篇
在前面几天的学习中,我们逐渐掌握了使用 Python 进行网络爬虫的基础知识,包括如何发送请求、解析 HTML 数据等。今天,我们将更深入地学习使用 requests 和 BeautifulSoup 库进行网页数据的抓取和解析,以便获取我们需要的信息。
1. 环境准备
如果你还没有安装 requests 和 BeautifulSoup 库,可以通过 pip 命令进行安装:
pip install requests beautifulsoup4
2. 基本的爬虫流程
在进行爬虫之前,让我们明确一下基本的爬虫流程:
- 发送请求:使用 requests 库发送 HTTP 请求,获取网页的 HTML 内容。
- 解析数据:使用 BeautifulSoup 解析 HTML 页面,提取需要的数据。
- 保存数据:将提取到的数据保存到本地文件或数据库中。
- 处理异常:处理可能出现的异常情况,如请求失败、数据解析失败等。
3. 示例代码
下面我们将以抓取一个简单的网页为例,展示如何使用 requests 和 BeautifulSoup 进行爬虫操作。
示例网站
我们将以 http://quotes.toscrape.com/
作为示例网站,这个网站专门用于爬虫学习,提供了一些名人名言的信息。
爬虫代码
import requests
from bs4 import BeautifulSoup
# 发送请求
url = 'http://quotes.toscrape.com/'
try:
response = requests.get(url)
response.raise_for_status() # 如果请求失败,抛出异常
except requests.RequestException as e:
print(f'请求失败: {e}')
exit()
# 解析数据
soup = BeautifulSoup(response.text, 'html.parser')
# 提取数据
quotes = soup.find_all('div', class_='quote')
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
print(f'名言: {text} — 作者: {author}')
代码解释
-
请求网页:我们使用
requests.get()
方法获取网页内容,并且利用response.raise_for_status()
确保请求成功。如果请求失败,会抛出一个异常。 -
解析网页:使用
BeautifulSoup
解析获得的 HTML 文本。我们指定解析器为html.parser
。 -
查找数据:使用
soup.find_all()
方法查找所有带有quote
类的<div>
标签。然后,循环遍历这些名言,从中提取名言文本和作者信息。 -
输出结果:打印出每条名言及其作者。
4. 扩展功能
在上述代码的基础上,我们可以增加一些功能,比如分页抓取。如果我们想抓取多页的数据,可以通过 URL 中的页码参数进行循环请求:
for page in range(1, 4): # 爬取前3页
url = f'http://quotes.toscrape.com/page/{page}/'
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
quotes = soup.find_all('div', class_='quote')
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
print(f'名言: {text} — 作者: {author}')
这样就可以抓取到多页的名人名言啦。
5. 注意事项
在进行爬虫时要注意:
- 尊重网站的
robots.txt
文件,了解网站对爬虫的限制。 - 控制请求频率,避免对目标网站造成过大压力。
- 如果需要大量抓取数据,建议使用代理 IP,避免被封禁。
通过这一系列的学习,我们已经掌握了 Python 爬虫的基本技巧。希望大家在实际应用中能够灵活运用。继续加油!