告别手动复制粘贴!Python Day 2带你全自动抓取豆瓣电影TOP250

欢迎回到 “5天学会Python” 实战营第二天!

昨天,我们用不到40行代码构建了一个本地文本分析器,感受到了Python在文本处理上的简洁与高效。你已经掌握了文件I/O、字典、Counter等核心知识。

今天,我们要把目光从本地文件投向广阔的互联网。数据,是这个时代的石油,而网络爬虫就是开采石油的钻井。我们将亲手打造一个简单的网络爬虫,从大名鼎鼎的豆瓣电影网站上,抓取TOP250电影的榜单数据。

今日目标:

  1. 学习使用第三方库 requestsbeautifulsoup4
  2. 了解网络爬虫的基本原理:发送请求 -> 获取响应 -> 解析数据 -> 存储数据。
  3. 掌握浏览器开发者工具(F12)在爬虫开发中的关键作用。
  4. 将抓取到的结构化数据存入CSV文件。
  5. 挑战进阶:完成所有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 键,打开“开发者工具”。

  1. 点击左上角的“检查”图标 (一个箭头指向方框的图标)。
  2. 将鼠标移动到你想抓取信息的位置,例如第一部电影《肖申克的救赎》的标题上。
    在这里插入图片描述
    在这里插入图片描述

通过观察,我们可以发现:

  • 每一部电影的信息都包含在一个 <div> 标签里,且这个divclassitem
    • 电影标题在 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个字符看看

知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值