Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Tạo danh sách phim ngẫu nhiên với Python
Trong bài hướng dẫn này, chúng ta sẽ sử dụng Python để thực hiện một dự án thú vị: Crawl danh sách IMDb Top 250 phim nổi tiếng nhất và để Python chọn ngẫu nhiên một bộ phim cho bạn. Bạn sẽ học cách sử dụng các thư viện requests và BeautifulSoup để lấy dữ liệu từ một trang web.
Dưới đây là mã nguồn hoàn chỉnh cho dự án (cũng có thể được tìm thấy trên GitHub):
Cách sử dụng các thư viện requests và BeautifulSoup trong Python
import random import requests from bs4 import BeautifulSoup # URL của trang IMDb Top 250 URL = 'http://www.imdb.com/chart/top' def main(): # Gửi yêu cầu đến trang IMDb response = requests.get(URL) # Phân tích HTML của trang soup = BeautifulSoup(response.text, 'html.parser') # (hoặc dùng 'lxml' để tăng tốc độ: `soup = BeautifulSoup(response.text, 'lxml')`) # Lấy các phần tử liên quan đến phim và đánh giá movietags = soup.select('td.titleColumn') inner_movietags = soup.select('td.titleColumn a') ratingtags = soup.select('td.posterColumn span[name=ir]') # Hàm lấy năm sản xuất từ thông tin thẻ HTML def get_year(movie_tag): moviesplit = movie_tag.text.split() year = moviesplit[-1] # lấy mục cuối cùng return year # Trích xuất thông tin các bộ phim years = [get_year(tag) for tag in movietags] actors_list = [tag['title'] for tag in inner_movietags] # truy cập thuộc tính 'title' titles = [tag.text for tag in inner_movietags] ratings = [float(tag['data-value']) for tag in ratingtags] # truy cập thuộc tính 'data-value' n_movies = len(titles) # Số lượng phim # Lựa chọn phim ngẫu nhiên while True: idx = random.randrange(0, n_movies) print(f'{titles[idx]} {years[idx]}, Rating: {ratings[idx]:.1f}, Starring: {actors_list[idx]}') user_input = input('Bạn có muốn chọn phim khác không (y/[n])? ') if user_input != 'y': break if __name__ == '__main__': main()
Giải thích mã nguồn:
requests
và BeautifulSoup
:
requests.get(URL)
: Gửi yêu cầu HTTP để lấy mã HTML của trang web.BeautifulSoup
: Phân tích cú pháp HTML giúp dễ dàng trích xuất dữ liệu.
Lấy dữ liệu:
Bài viết này được đăng tại [free tuts .net]
- Sử dụng
soup.select()
để chọn các thẻ HTML cụ thể:td.titleColumn
: Chứa tiêu đề phim và năm sản xuất.td.titleColumn a
: Chứa liên kết và thông tin diễn viên.td.posterColumn span[name=ir]
: Chứa điểm đánh giá.
Trích xuất thông tin:
- Năm sản xuất: Tách thông tin từ chuỗi trong thẻ
td.titleColumn
. - Diễn viên: Truy cập thuộc tính
title
của thẻ<a>
. - Điểm đánh giá: Chuyển giá trị trong thuộc tính
data-value
thành số thực (float
).
Chọn phim ngẫu nhiên:
random.randrange(0, n_movies)
: Chọn một chỉ mục ngẫu nhiên trong danh sách phim.- Hiển thị thông tin phim (tên, năm, điểm đánh giá, và diễn viên chính).
- Hỏi người dùng nếu muốn xem thêm phim ngẫu nhiên khác.
Kết quả chạy chương trình
Khi chạy script, chương trình sẽ in ra một bộ phim được chọn ngẫu nhiên từ danh sách IMDb Top 250, cùng với các thông tin:
The Shawshank Redemption (1994), Rating: 9.3, Starring: Tim Robbins, Morgan Freeman Bạn có muốn chọn phim khác không (y/[n])?
Hãy nhập y
để chọn phim tiếp theo hoặc bất kỳ phím nào khác để kết thúc chương trình.
Kết quả
- Lưu kết quả vào một file .txt.
- Thêm tính năng lọc phim dựa theo thể loại, điểm đánh giá hoặc năm sản xuất.
- Dùng giao diện người dùng (GUI) thay vì dòng lệnh.
Chúc bạn lập trình vui vẻ với Python!