练习9:BeautifulSoup和CSS选择器 📕

📋 任务目标

掌握BeautifulSoup和CSS选择器的使用

💡 知识点回顾

课程位置:07.处理数据的方法.pdf - 7.3 BeautifulSoup

核心方法:

CSS选择器:

📝 电影列表

千与千寻

导演:宫崎骏

年份:2001

类型:动画

⭐ 9.4

龙猫

导演:宫崎骏

年份:1988

类型:动画

⭐ 9.2

疯狂动物城

导演:拜伦·霍华德

年份:2016

类型:动画

⭐ 9.2

寻梦环游记

导演:李·昂克里奇

年份:2017

类型:动画

⭐ 9.1

狮子王

导演:罗杰·艾勒斯

年份:1994

类型:动画

⭐ 9.0

💡 示例代码

方法1:使用find和find_all

import requests
from bs4 import BeautifulSoup

url = 'https://req.haleibc.com/practice9'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

# 查找所有电影卡片
movies = soup.find_all('div', class_='movie-card')
for movie in movies:
    title = movie.find('h3', class_='movie-title').text
    director = movie.find('p', class_='director').text
    rating = movie.find('span', class_='movie-rating').text
    print(f"{title} - {director} - {rating}")

方法2:使用CSS选择器

import requests
from bs4 import BeautifulSoup

url = 'https://req.haleibc.com/practice9'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

# 使用CSS选择器
titles = soup.select('h3.movie-title')
for title in titles:
    print(title.text)

# 组合选择器
directors = soup.select('.movie-card .director')
for director in directors:
    print(director.text)

# 提取属性
movie_ids = soup.select('.movie-card')
for movie in movie_ids:
    print(f"ID: {movie['data-id']}")

方法3:完整提取

import requests
from bs4 import BeautifulSoup

url = 'https://req.haleibc.com/practice9'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

# 提取所有电影信息
movies = []
for card in soup.select('.movie-card'):
    movie = {
        'id': card['data-id'],
        'title': card.select_one('.movie-title').text,
        'director': card.select_one('.director').text,
        'year': card.select_one('.year').text,
        'genre': card.select_one('.genre').text,
        'rating': card.select_one('.movie-rating').text
    }
    movies.append(movie)
    print(movie)

✅ 练习任务

1. 使用find_all()提取所有电影标题

2. 使用CSS选择器提取所有导演信息

3. 使用CSS选择器提取所有评分

4. 提取data-id属性

5. 组合提取每部电影的完整信息

6. 筛选评分大于9.0的电影

返回练习列表 下一个练习 →