欢迎来到 Python 基础入门 Day14!在前一节中,我们学习了如何使用 requests
模块发送和处理 HTTP 请求。如果你已经掌握了这些内容,今天的内容将更令人兴奋:Web 爬虫!爬虫是从网页提取数据的工具,它是数据分析和机器学习项目的重要基础。
目录
- 什么是 Web 爬虫?
- 安全与合法性注意事项
- 使用
requests
获取网页内容 - 使用
BeautifulSoup
解析 HTML - 示例:爬取一个简单网页
- 处理分页与动态加载
- 小结与练习
一、什么是 Web 爬虫?
Web 爬虫(Web Scraper)是通过编程方式访问网页,并自动提取其中的数据。常见应用包括:
- 数据收集(如价格监控、新闻爬取)
- 搜索引擎索引(如 Google 搜索)
- 内容聚合(如旅游、招聘信息)
注意:爬取网站前,请阅读目标网站的 robots.txt 文件,了解其爬取规则并避免违规操作。
二、安全与合法性注意事项
在爬取网页之前,请牢记以下事项:
- 尊重网站规则:检查网站的
robots.txt
文件,遵守限制。 - 不要过于频繁请求:设置合适的爬取间隔,避免给服务器带来压力。
- 不要爬取敏感数据:尊重用户隐私。
- 爬取合法内容:未经授权,避免爬取受版权保护的内容。
示例:访问
https://example.com/robots.txt
查看该站点的爬取限制。
三、使用 requests
获取网页内容
我们可以使用 requests
模块获取网页的 HTML 内容:
import requests
url = "https://example.com"
response = requests.get(url)
# 检查状态码和响应内容
if response.status_code == 200:
print(response.text) # 输出 HTML 源代码
else:
print(f"Failed to retrieve the page: {response.status_code}")
四、使用 BeautifulSoup
解析 HTML
BeautifulSoup
是一个强大的 HTML 解析库,它能轻松提取页面中的特定数据。
4.1 安装 BeautifulSoup
使用 pip 安装:
pip install beautifulsoup4 lxml
4.2 基本用法
以下示例展示了如何提取标题和所有链接:
from bs4 import BeautifulSoup
html = """
<html>
<head><title>Example Page</title></head>
<body>
<h1>Welcome to Example Page</h1>
<a href="https://example.com/page1">Page 1</a>
<a href="https://example.com/page2">Page 2</a>
</body>
</html>
"""
soup = BeautifulSoup(html, 'lxml')
# 提取标题
print(soup.title.string)
# 提取所有链接
for link in soup.find_all('a'):
print(link['href'])
输出结果
Example Page
https://example.com/page1
https://example.com/page2
五、示例:爬取一个简单网页
以下示例展示了如何爬取 豆瓣读书 Top250 的书名和评分:
5.1 代码实现
import requests
from bs4 import BeautifulSoup
url = "https://book.douban.com/top250"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# 提取书名和评分
books = soup.find_all('tr', class_='item')
for book in books:
title = book.find('div', class_='pl2').a['title']
rating = book.find('span', class_='rating_nums').text
print(f"Title: {title}, Rating: {rating}")
5.2 输出结果
Title: 平凡的世界(全三部), Rating: 9.4
Title: 红楼梦(上下), Rating: 9.6
...
六、处理分页与动态加载
6.1 爬取多页数据
许多网站的数据分布在多个页面上。可以通过改变 URL 中的分页参数来爬取:
for page in range(1, 6): # 爬取前 5 页
url = f"https://example.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# 处理页面数据
6.2 动态加载内容
有些网站的数据通过 JavaScript 动态加载,此时 requests
无法获取完整内容。可以使用以下两种方法解决:
- 检查 API 接口:许多网站在加载动态内容时调用 API,可以直接抓取 API 数据。
- 使用 Selenium 模拟浏览器:适用于复杂场景(详细内容请参考后续课程)。
七、小结与练习
今天我们学习了 Python 的 Web 爬虫基础,包括使用 requests
获取网页内容和 BeautifulSoup
解析 HTML。爬虫是处理大规模数据的有效工具,但在使用时必须注意合法性和合规性。
今日练习题:
- 使用
requests
和BeautifulSoup
爬取一个简单网站上的文章标题列表。 - 爬取某电商网站的商品名称和价格(尽量选择公开、无限制的数据)。
- 探索网站的 API 接口,尝试直接抓取 JSON 数据。
下一节预告:在 Day15 中,我们将介绍 Python 爬虫进阶:Selenium 的使用,教你如何处理动态网页爬取。敬请期待!
希望你在今天的学习中有所收获!如果有任何问题或建议,欢迎留言交流 😊。