欢迎回到 “5天学会Python” 实战营第二天!
昨天,我们用不到40行代码构建了一个本地文本分析器,感受到了Python在文本处理上的简洁与高效。你已经掌握了文件I/O、字典、Counter
等核心知识。
今天,我们要把目光从本地文件投向广阔的互联网。数据,是这个时代的石油,而网络爬虫就是开采石油的钻井。我们将亲手打造一个简单的网络爬虫,从大名鼎鼎的豆瓣电影网站上,抓取TOP250电影的榜单数据。
今日目标:
- 学习使用第三方库
requests
和beautifulsoup4
。 - 了解网络爬虫的基本原理:发送请求 -> 获取响应 -> 解析数据 -> 存储数据。
- 掌握浏览器开发者工具(F12)在爬虫开发中的关键作用。
- 将抓取到的结构化数据存入CSV文件。
- 挑战进阶:完成所有10个页面的数据抓取。
准备好进入激动人心的爬虫世界了吗?Let’s Go!
Step 1: 环境准备 (安装第三方库)
与昨天只使用Python内置功能不同,今天我们需要借助两个强大的第三方库。在Python世界,我们使用 pip
(Python包管理器) 来安装它们。
打开你的终端或命令行,运行以下两条命令:
# 安装 requests 库,它能帮你优雅地发送网络请求
pip install requests
# 安装 beautifulsoup4 库,它能帮你轻松地解析HTML文档
pip install beautifulsoup4
提示: 如果你的电脑上同时有Python 2和Python 3, 建议使用
pip3
代替pip
。如果安装速度很慢,可以考虑使用国内的镜像源,例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
Step 2: 分析目标网页
我们的目标是豆瓣电影Top250榜单:https://movie.douban.com/top250
在编写代码前,最重要的工作是“踩点”。在浏览器中打开这个网址,然后按下 F12
键,打开“开发者工具”。
- 点击左上角的“检查”图标 (一个箭头指向方框的图标)。
- 将鼠标移动到你想抓取信息的位置,例如第一部电影《肖申克的救赎》的标题上。
在这里插入图片描述
通过观察,我们可以发现:
- 每一部电影的信息都包含在一个
<div>
标签里,且这个div
的class
是item
。- 电影标题在
class="title"
的<span>
标签内。 - 评分在
class="rating_num"
的<span>
标签内。 - 排名在
class=""
的<em>
标签内。 - 经典引语在
class="quote"
的<p>
标签内。
这些class
名称就是我们稍后在代码中定位数据的关键点。
- 电影标题在
Step 3: 获取单个页面的数据
现在,创建 douban_scraper.py
文件,让我们开始编码。
3.1 发送请求,获取HTML
我们使用 requests
库来模拟浏览器,向豆瓣服务器发送一个GET请求。
import requests
def fetch_page(url):
"""发送GET请求,获取页面HTML内容"""
# 伪装成浏览器,添加User-Agent头,否则可能被网站拒绝
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
# 确保请求成功 (状态码 200)
if response.status_code == 200:
return response.text
else:
print(f"请求失败,状态码: {
response.status_code}")
return None
except requests.RequestException as e:
print(f"请求异常: {
e}")
return None
# --- 测试 ---
url = 'https://movie.douban.com/top250'
html = fetch_page(url)
if html:
print("成功获取到页面HTML!")
# print(html[:500]) # 打印前500个字符看看
知识