CodeGym /Khóa học Java /Python SELF VI /Làm việc với nội dung JavaScript

Làm việc với nội dung JavaScript

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Giới thiệu về các trang web động

Nếu bạn từng cố gắng scrape dữ liệu từ các trang web cập nhật nội dung ngay lập tức nhờ JavaScript, thì bạn sẽ biết rằng điều này có thể trở thành một câu đố thực thụ. Nhưng đừng lo lắng! Như người ta thường nói, mọi đoạn code phức tạp đều có thể được cài đặt để trở nên giống như phép thuật. Hãy cùng tìm hiểu cách requests_html cho phép chúng ta làm việc với nội dung kiểu này.

Như đã biết, không phải tất cả các trang web đều có cùng giá trị. Một số trang tải nội dung ngay lập tức, trong khi những trang khác có thể tạo hoặc cập nhật nội dung một cách động bằng JavaScript. Điều này tạo ra một số khó khăn cho những ai muốn trích xuất dữ liệu, bởi HTML mà bạn nhìn thấy qua công cụ dành cho nhà phát triển có thể khác với HTML mà bạn nhận được khi thực hiện một yêu cầu thông thường.

Vấn đề phát sinh khi scrape nội dung động

Phần lớn các thư viện làm việc với web, như là requests, chỉ làm việc với phản hồi từ server và không thể thực thi JavaScript. Điều này có nghĩa là nếu nội dung được tải hoặc thay đổi thông qua JavaScript, bạn có thể không thấy chúng khi thực hiện một yêu cầu thông thường.

2. Sử dụng thư viện requests_html

Và đây là lúc requests_html xuất hiện — một thư viện kết hợp sự đơn giản của requests và sức mạnh của trình duyệt để thực thi JavaScript. Nó cung cấp cho bạn một engine cơ bản để render, cho phép tương tác với các trang web động giống như bạn đang sử dụng một trình duyệt thực sự.

Cài đặt và cấu hình thư viện

Để bắt đầu, hãy cài đặt thư viện requests_html. Mở terminal yêu thích của bạn và chạy lệnh sau:

Bash
pip install requests-html

Tuyệt vời, thư viện đã được cài đặt! Bây giờ chúng ta có thể làm việc với nó.

Cơ bản sử dụng requests_html để trích xuất nội dung JavaScript

requests_html làm cho cuộc sống của chúng ta đơn giản hơn. Hãy xem cách nó hoạt động trên thực tế. Giả sử chúng ta có một trang tạo ra một số dữ liệu thông qua JavaScript.

Python

from requests_html import HTMLSession

# Tạo session HTML
session = HTMLSession()

# Thực hiện yêu cầu đến trang web
response = session.get('https://example-dynamic-page.com')

# Render JavaScript
response.html.render()

# Trích xuất dữ liệu
data = response.html.find('#dynamic-content', first=True)
print(data.text)

Thật là kỳ diệu! Không giống như requests, requests_html cung cấp cho chúng ta phương thức .render(), cho phép "làm sống" trang web và thực thi JavaScript. Ngay khi trang "sống lại", bạn có thể trích xuất tất cả dữ liệu cần thiết bằng cách sử dụng các selector mà chúng ta đã học trước đó.

3. Ví dụ về trích xuất dữ liệu

Bây giờ, hãy đi sâu hơn và xem xét một vài ví dụ, để bạn có thể thấy requests_html cứu chúng ta trong những tình huống khác nhau như thế nào.

Trích xuất dữ liệu thực tế từ các trang động

Hãy tưởng tượng một trang tải tin tức mới nhất chỉ khi bạn cuộn xuống. Với requests_html, chúng ta có thể giả lập hành vi của người dùng.

Python

url = 'https://example-news-site.com'

# Tải trang
response = session.get(url)

# Thực hiện rendering với thời gian chờ tăng thêm nếu cần thiết
response.html.render(timeout=20)

# Tìm các mục tin tức
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

Rất đơn giản và nhẹ nhàng, chúng ta đã truy cập được nội dung trước đây tưởng chừng không thể nắm bắt!

Xử lý nội dung JavaScript tải về bằng cách sử dụng requests_html

Với requests_html và các CSS-selector mà chúng ta đã xem trước đó trong các bài giảng, bạn có thể làm việc với nội dung trang web giống như bạn đã thực hiện scraping trong nhiều năm!

Python

# Chọn phần tử tiêu đề tin tức đầu tiên
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Trích xuất liên kết từ phần tử
link = headline.find('a', first=True).attrs['href']
print(link)

4. Lời khuyên và mẹo thực tiễn

Mặc dù requests_html là một công cụ mạnh mẽ, khi làm việc với nó, bạn cần lưu ý một vài điều:

  • Thời gian chờ và độ trễ: Đừng quên cấu hình thời gian chờ render cho các trang phức tạp hơn. Điều này sẽ giúp tránh lỗi do tải chậm.
  • Khả năng render: requests_html có thể tiêu tốn nhiều tài nguyên vì nó render JavaScript. Với khối lượng dữ liệu lớn hoặc các trang phức tạp, điều này có thể làm chậm quá trình.
  • CAPTCHA và bảo vệ bot: requests_html không vượt qua các bảo vệ chống bot và CAPTCHA, vì vậy với các trường hợp khó khăn hơn, tốt nhất là sử dụng Selenium.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION