掌握BeautifulSoup和CSS选择器的使用
课程位置:07.处理数据的方法.pdf - 7.3 BeautifulSoup
核心方法:
soup.find(tag, attrs) - 查找第一个匹配的标签soup.find_all(tag, attrs) - 查找所有匹配的标签soup.select(selector) - 使用CSS选择器CSS选择器:
.class - 类选择器#id - ID选择器tag - 标签选择器tag.class - 组合选择器parent > child - 直接子元素parent child - 所有后代元素导演:宫崎骏
年份:2001
类型:动画
导演:宫崎骏
年份:1988
类型:动画
导演:拜伦·霍华德
年份:2016
类型:动画
导演:李·昂克里奇
年份:2017
类型:动画
导演:罗杰·艾勒斯
年份:1994
类型:动画
方法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的电影