Đã bật JavaScript của BeautifulSoup

JavaScript ở khắp mọi nơi. Nếu bạn tìm thấy một trang web không có JavaScript trên trang, bạn có thể cá rằng đó là từ những năm 1990

Điều đó thể hiện các vấn đề đối với việc quét web. Hầu hết thời gian, dữ liệu nằm ngay trong HTML của trang. Nó có thể dễ dàng nhìn thấy và cạo. Tuy nhiên, đôi khi dữ liệu chỉ khả dụng sau khi JavaScript được hiển thị

Điều đó đưa ra một thách thức đối với việc quét web. Tôi đã viết các bài báo trước đây về quét web tập trung vào các thư viện Python dễ sử dụng

Thật không may, phương pháp đó bị hỏng khi bạn đưa kết xuất JavaScript vào hỗn hợp

Vậy làm cách nào để chúng tôi xử lý các trang web bẫy dữ liệu của họ đằng sau kết xuất JavaScript?

Công cụ phù hợp cho công việc

Thông thường, tôi muốn giới thiệu một vài thư viện truy cập để quét web

  • yêu cầu
  • ĐẹpSúp

Hai công cụ này có thể làm được rất nhiều việc, ngay cả khi bạn đang xem qua nhiều trang để lấy dữ liệu. Tuy nhiên, chúng không thể được sử dụng để hiển thị JavaScript

Có cả một bộ công cụ được xây dựng cho loại công việc này. Các công cụ này được nhóm thành một danh mục được gọi là Tự động hóa trình duyệt

Mục tiêu của một công cụ tự động hóa trình duyệt là mô phỏng trải nghiệm duyệt web nhưng nó được tự động hóa để nó có thể chạy ở các khoảng thời gian hoặc tốc độ mà một người không thể đạt được

Chúng được quảng cáo nhiều hơn về khả năng kiểm tra trang web của họ cho chủ sở hữu trang web. Họ cũng tình cờ có mọi thứ chúng tôi cần để hiển thị JavaScript và thu thập dữ liệu cơ bản

Một số công cụ phổ biến hơn trong danh mục này là

  • phế liệu
  • nhà viết kịch
  • selen

Trong ví dụ này, chúng tôi sẽ tập trung vào việc sử dụng Selenium. Chúng tôi cũng sẽ sử dụng thư viện đáng tin cậy BeautifulSoup để phân tích phản hồi

Thiết lập không gian làm việc

Vì chúng tôi đang tự động hóa hoàn toàn trình duyệt web nên cần thiết lập nhiều hơn một chút so với chỉ một vài lần cài đặt pip. Chúng tôi sẽ cần một vài thứ khác được cài đặt

  • Chrome [hoặc trình duyệt web khác, chúng tôi sẽ sử dụng Chrome trong ví dụ này]
  • ChromeDriver [trình điều khiển web dành cho Chrome]

Hãy tiếp tục và cài đặt Chrome nếu bạn muốn làm theo. Đối với cài đặt ChromeDriver, chúng tôi sẽ sử dụng thư viện Python tiện dụng sẽ làm điều đó cho chúng tôi

Như đã nói, hãy tiếp tục và cài đặt các thư viện mà chúng tôi sẽ sử dụng

pip install selenium
pip install bs4
pip install chromedriver-autoinstaller

Khi tất cả đã được cài đặt, chúng ta có thể bắt đầu nhập

import chromedriver_autoinstaller
from selenium import webdriver
from bs4 import BeautifulSoup

Thư viện chromedriver_autoinstaller sẽ xử lý việc cài đặt ChromeDriver và thêm nó vào PATH nếu nó chưa có ở đó, điều này sẽ khiến chúng tôi mất một chút công việc. Chúng ta có thể làm điều đó với một dòng đơn giản

chromedriver_autoinstaller.install[]

Đó là khá nhiều để thiết lập môi trường của chúng tôi. Tóm lại, chúng tôi đã cài đặt selen, bs4 và chromedriver-autoinstaller. Tệp Python của chúng ta bây giờ trông như thế này

Nhập khẩuBắt trang web

Với môi trường của chúng tôi được thiết lập, chúng tôi có thể bắt đầu yêu cầu các trang web. Để làm điều đó, chúng ta cần thiết lập đối tượng webdriver mà selen sẽ sử dụng

driver = webdriver.Chrome[]

Và chúng ta có thể tiếp tục và yêu cầu người lái xe tìm nạp một trang web. Trong ví dụ này, chúng tôi sẽ loại bỏ những bộ phim mới được chứng nhận của Rotten Tomatoes

Dữ liệu chúng tôi theo đuổi [tiêu đề phim, xếp hạng, v.v. ] có thể được tìm thấy mà không hiển thị JavaScript. Tuy nhiên, việc phân tích cú pháp dữ liệu sẽ dễ dàng hơn nhiều khi nó được hiển thị

Trang này được hiển thị gần như hoàn toàn bằng JavaScript, đây là trang web đã bật JavaScript

Đã bật JavaScript

Và với JavaScript bị vô hiệu hóa

JavaScript bị vô hiệu hóa

Chúng tôi có thể yêu cầu trang web này bằng cách sử dụng phương thức “get” đối tượng trình điều khiển của chúng tôi

driver.get['//www.rottentomatoes.com/browse/cf-dvd-streaming-all']

Và chúng ta có thể lấy đầu ra html bằng thuộc tính page_source

html = driver.page_source

Tóm lại, đây là nơi chúng ta đang viết mã

Phân tích cú pháp HTML

Bây giờ, Selenium có thể phân tích dữ liệu. Chúng tôi sẽ sử dụng nó trong một số tình huống nhất định. Tuy nhiên, BeautifulSoup sẽ là mục tiêu của chúng tôi để phân tích cú pháp HTML. Vì vậy, hãy làm một món súp từ nguồn trang

soup = BeautifulSoup[html, 'html.parser']

Bây giờ, chúng ta nên có một cái gì đó trông như thế này

Canh

Nếu chúng tôi in ra đối tượng súp này mà chúng tôi đã tạo ra. Chúng tôi nhận được trang web đầy đủ, trừ đi một số định dạng ưa thích. May mắn thay, chúng ta không phải đợi JavaScript thực thi trên trang này

Trong một số trường hợp, chúng tôi sẽ phải đợi JavaScript thực thi. Điều này có thể được thực hiện bằng cách chờ đợi ngầm hoặc chờ đợi rõ ràng

Vì chúng tôi không phải lo lắng về điều đó, hãy tìm thông tin chúng tôi đang tìm kiếm

Phim đã kết xuất

Có vẻ như tất cả các bộ phim mà chúng tôi đang tìm kiếm đều nằm trong div của chính chúng với lớp “mb-movie”

Mỗi trong số này giữ thông tin về bộ phim riêng lẻ

thông tin phim

Chúng tôi có thể lấy từng cái trong số chúng và lấy tiêu đề, điểm số và ngày phát hành một cách dễ dàng với BeautifulSoup

Thông tin được phân tích cú phápKết luận

Vì vậy, chúng tôi đã đề cập khá nhiều trong một khoảng thời gian ngắn. Đây là bản tóm tắt những gì chúng tôi đã làm

  • Chrome đã cài đặt
  • Đã cài đặt ChromeDriver bằng thư viện Python
  • Đã kéo một trang web nặng JavaScript bằng Selenium
  • Phân tích cú pháp và thu thập dữ liệu bằng BeautifulSoup

Đây là cái nhìn cuối cùng về nơi chúng tôi kết thúc, với dữ liệu được in ra trong thiết bị đầu cuối

Nếu điều này giúp ích cho bạn, cách tốt nhất để hỗ trợ tôi là theo dõi tôi trên Twitter hoặc tại đây trên Phương tiện

Phản hồi là bạn của tôi, vì vậy hãy thoải mái liên hệ và nói với tôi rằng bạn thích câu chuyện của tôi, muốn một số chủ đề được đề cập hoặc một phần nào đó của điều này có thể được thực hiện tốt hơn

BeautifulSoup có chạy JavaScript không?

Beautiful Soup là một thư viện rất mạnh giúp việc quét web bằng cách duyệt qua DOM [mô hình đối tượng tài liệu] dễ triển khai hơn. Nhưng nó chỉ cạo tĩnh. Trình quét tĩnh bỏ qua JavaScript . Nó tìm nạp các trang web từ máy chủ mà không cần sự trợ giúp của trình duyệt.

Sự khác biệt giữa các yêu cầu và BeautifulSoup là gì?

Yêu cầu - Thư viện Python được sử dụng để gửi yêu cầu HTTP tới trang web và lưu trữ đối tượng phản hồi trong một biến. BeautifulSoup — Một thư viện Python được sử dụng để trích xuất dữ liệu từ tài liệu HTML hoặc XML

Chủ Đề