Đã 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
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à
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ệcVì 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
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 Khi tất cả đã được cài đặt, chúng ta có thể bắt đầu nhập import chromedriver_autoinstaller 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 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 Và với 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('https://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ã 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 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 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ẻ 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 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
Đâ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 |