1. Tải về và phân tích tài liệu HTML
Tóm tắt chức năng
Thư viện requests
— là "người đưa thư" của chúng ta,
người đi lấy mã HTML từ các trang web. Nó gửi các yêu cầu HTTP
và mang về các trang, như một người giao pizza, chỉ là không có "Margherita"
và hộp đựng.
BeautifulSoup
, mặt khác, là "đầu bếp" của chúng ta
dễ dàng phân tách HTML đã nhận được thành các thành phần (các thẻ, thuộc tính
và nội dung), để chúng ta có thể sử dụng chúng. Nó giúp chúng ta tìm kiếm
các yếu tố cần thiết và lưu trữ tất cả thông tin quan trọng.
Sử dụng thư viện requests
Bây giờ chúng ta đã sẵn sàng để thực hiện yêu cầu HTTP đầu tiên
và lấy mã HTML của trang. Hãy thử tải trang
example.com
để thực hành. Trang web này là "khủng long"
của Internet và hoàn hảo cho người mới bắt đầu.
import requests
url = 'http://example.com'
response = requests.get(url)
# Kiểm tra xem mọi thứ có ổn không
if response.status_code == 200:
print("Trang đã được tải thành công!")
else:
print("Có lỗi xảy ra. Mã lỗi:", response.status_code)
Chương trình này sẽ gửi yêu cầu tới URL và hiển thị thành công hoặc lỗi, tùy thuộc vào phản hồi. Nếu mọi chuyện ổn, chúng ta sẽ có mã HTML của trang dưới dạng văn bản.
Theo dõi mã lỗi
Nếu bạn tự động hóa việc phân tích, bạn sẽ thường xuyên gặp phải tình huống trang đáng lẽ phải tải về thì lại không tải được. Vì vậy, việc phân tích mã lỗi là phần không thể thiếu khi thực hiện các dự án phân tích nhiều hơn vài trang.
Chuyện là các chủ sở hữu trang web không thực sự thích khi ai đó phân tích dữ liệu của họ. Thứ nhất, nó tạo ra áp lực lên trang web (khi phân tích hàng nghìn trang cùng một lúc). Thứ hai, đó là dữ liệu của họ và họ kiếm tiền từ nó. Có rất nhiều cách để chống lại việc phân tích: CAPTCHA, CloudFlare v.v.
Đối với kinh doanh, lý tưởng nhất là khi bạn có thể phân tích tất cả các đối thủ cạnh tranh của mình, nhưng không ai có thể phân tích bạn. Một kiểu chiến tranh lạnh.
Sử dụng BeautifulSoup để phân tích HTML
Sau khi có mã HTML, chúng ta có thể bắt đầu nghiên cứu nó
với BeautifulSoup
. Đây giống như mở một quyển sách và
đọc nội dung của nó:
from bs4 import BeautifulSoup
# Gửi nội dung mã HTML vào BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# Xem bên trong có gì
print(soup.prettify())
Phương pháp prettify()
định dạng mã HTML một cách đẹp đẽ,
để bạn có thể nghiên cứu nó. Ở bài học tiếp theo, chúng ta sẽ bắt đầu
khám phá mã HTML này giống như trẻ em chơi trong hộp cát. Và trở về nhà
mệt mỏi, bẩn nhưng hạnh phúc :)
3. Thực hành: tải về và phân tích HTML
Để củng cố sự hiểu biết, hãy thực hiện bài tập thực hành. Chúng ta
sẽ cố gắng lấy tiêu đề và mô tả từ trang
example.com
. Để làm điều này, chúng ta sẽ sử dụng các
kiến thức về HTML và kiến thức mới về BeautifulSoup.
Trích xuất dữ liệu
# Trích xuất tiêu đề trang
title = soup.title.string
print("Tiêu đề trang:", title)
# Trích xuất tiêu đề chính (h1)
main_heading = soup.h1.string
print("Tiêu đề chính:", main_heading)
# Trích xuất nội dung văn bản của đoạn văn
paragraph = soup.find('p').text
print("Đoạn văn đầu tiên:", paragraph)
Trong ví dụ này, chúng ta sử dụng các thuộc tính title
,
h1
, và phương pháp find()
để lấy
từ trang những mẩu thông tin cần thiết. Chúng ta đang trở thành
những thám tử mạng, nghiên cứu các dấu vết tại hiện trường!
4. Các lỗi thường gặp
Chắc chắn rằng trong quá trình làm việc với web scraping, bạn sẽ
gặp các lỗi phổ biến như xử lý sai yêu cầu HTTP, trích xuất dữ liệu
không chính xác hoặc gặp lỗi phân tích HTML. Việc phát triển
các script bền vững và đáng tin cậy đòi hỏi sự kiên nhẫn và thực hành.
Ví dụ, hãy luôn kiểm tra mã trạng thái
(response.status_code
) để đảm bảo yêu cầu của bạn đã
được thực hiện thành công. Sử dụng không đúng các phương pháp
find()
và find_all()
có thể dẫn đến lỗi, nếu
bạn không xem xét kỹ cấu trúc của các trang HTML. Hãy luôn phân tích
HTML trước khi bắt đầu phân tích.
Web scraping có nhiều ứng dụng thực tế: từ thu thập dữ liệu để phân tích đến giám sát giá cả sản phẩm tự động. Những kiến thức này có thể hữu ích khi tham gia phỏng vấn, nơi bạn có thể được yêu cầu cung cấp ví dụ về mã dự án. Trong thực tế, ví dụ, các marketer sử dụng scraping để giám sát giá cả từ đối thủ, còn các lập trình viên — để tích hợp với các trang web bên ngoài.
Kiến thức về web scraping sẽ rất hữu ích khi xử lý thông tin cho các trình tổng hợp tin tức và hệ thống phân tích. Bạn có thể tự động hóa các tác vụ lặp lại, tạo ra các script tự thu thập dữ liệu từ nhiều nguồn khác nhau. Hãy tiếp tục phát triển ứng dụng ảo của chúng ta và cảm thấy như mình là những bậc thầy thực thụ của web!
GO TO FULL VERSION