Cạo bảng javascript python
Có nhiều cách khác nhau để cạo các trang web bằng python. Trong bài viết trước của tôi, tôi đã giới thiệu về quét web bằng cách sử dụng các thư viện. echo $PATH 7 và echo $PATH 8. Tuy nhiên, nhiều trang web động và sử dụng JavaScript để tải nội dung của chúng. Các trang web này thường yêu cầu một cách tiếp cận khác để thu thập dữ liệu Show
Kỹ năng khoa học dữ liệu. Quét web bằng pythonMột trong những nhiệm vụ đầu tiên mà tôi được giao trong công việc của mình với tư cách là Nhà khoa học dữ liệu liên quan đến Quét web. Đây hoàn toàn là một…hướng tới khoa học dữ liệu. com Trong hướng dẫn này, tôi sẽ trình bày một số cách khác nhau để thu thập nội dung của trang web có chứa Javascript. Các kỹ thuật được sử dụng sẽ như sau
TL; DR Để biết các ví dụ về cách quét các trang web javascript trong python, bạn có thể tìm thấy mã hoàn chỉnh như được trình bày trong hướng dẫn này trên GitHubCập nhật ngày 7 tháng 11 năm 2019. Xin lưu ý, cấu trúc html của trang web đang được quét có thể được cập nhật theo thời gian và bài viết này ban đầu phản ánh cấu trúc tại thời điểm xuất bản vào tháng 11 năm 2018. Bài viết hiện đã được cập nhật để chạy với trang web hiện tại nhưng trong tương lai điều này có thể lại thay đổi Những bước đầu tiênĐể bắt đầu hướng dẫn, trước tiên tôi cần tìm một trang web để cạo. Trước khi tiếp tục với trình quét web của bạn, điều quan trọng là phải luôn kiểm tra Điều khoản & Điều kiện và Chính sách quyền riêng tư trên trang web bạn định quét để đảm bảo rằng bạn không vi phạm bất kỳ điều khoản sử dụng nào của họ Động lựcKhi cố gắng tìm một trang web phù hợp để minh họa, nhiều ví dụ mà tôi xem lần đầu tiên đã tuyên bố rõ ràng rằng trình thu thập dữ liệu web bị cấm. Mãi cho đến khi đọc một bài báo về hàm lượng đường trong sữa chua và tự hỏi tôi có thể tìm thấy thông tin dinh dưỡng mới nhất ở đâu đã truyền cảm hứng cho một luồng suy nghĩ khác về nơi tôi có thể tìm thấy một trang web phù hợp; Các nhà bán lẻ trực tuyến thường có các trang web động tải nội dung bằng javascript, vì vậy mục đích của hướng dẫn này là thu thập thông tin dinh dưỡng của sữa chua từ trang web của một siêu thị trực tuyến Thiết lập môi trường của bạnVì chúng tôi sẽ sử dụng một số thư viện python mới để truy cập nội dung của các trang web và cũng để xử lý dữ liệu, các thư viện này sẽ cần được cài đặt bằng trình quản lý gói python thông thường của bạn # add geckodriver to your PATH 2. Nếu bạn chưa có ________ 33 thì bạn cũng cần cài đặt cái này tại đâypip install selenium Để sử dụng echo $PATH 9 làm trình điều khiển web, có một vài yêu cầu bổ sungfirefoxTôi sẽ sử dụng Firefox làm trình duyệt cho trình điều khiển web của mình, vì vậy điều này có nghĩa là bạn sẽ cần cài đặt Firefox để làm theo hướng dẫn này hoặc bạn có thể sử dụng Chromium với Chrome tắc kèĐể sử dụng trình điều khiển web, chúng ta cần cài đặt một công cụ trình duyệt web, geckodriver. Bạn sẽ cần tải xuống geckodriver cho hệ điều hành của mình, giải nén tệp và đặt vị trí đường dẫn thực thi Bạn có thể thực hiện việc này theo nhiều cách. (ii) di chuyển geckodriver đến một thư mục đã được thiết lập làm thư mục chứa các tệp thực thi, đây được gọi là đường dẫn biến môi trường của bạn. # add geckodriver to your PATH 5 của mình bằng cách sau. Windows Bảng điều khiển> Biến môi trường> Biến hệ thống> Đường dẫn Mac OSX / Linux echo $PATH (iii) thêm vị trí tắc kè vào biến môi trường # add geckodriver to your PATH 6 của bạnWindows Bảng điều khiển > Biến môi trường > Biến hệ thống > Đường dẫn > Chỉnh sửa Mac OSX / Linux # add geckodriver to your PATH 7 (Mac OSX) hoặc # add geckodriver to your PATH 8 (Linux)# add geckodriver to your PATH Khởi động lại thiết bị đầu cuối của bạn và sử dụng lệnh từ (ii) để kiểm tra xem đường dẫn mới của bạn đã được thêm chưa PhantomJSTương tự như các bước dành cho geckodriver, chúng ta cũng cần tải PhantomJS. Sau khi tải xuống, hãy giải nén tệp và di chuyển đến thư mục bạn chọn hoặc thêm vào đường dẫn thực thi của bạn, làm theo các hướng dẫn tương tự như trên Máy khách RESTTrong phần cuối cùng của blog này, chúng tôi sẽ yêu cầu API bằng ứng dụng khách REST. Tôi sẽ sử dụng Insomnia nhưng bạn có thể sử dụng bất kỳ khách hàng nào bạn thích Cạo trang web bằng BeautifulSoupLàm theo các bước tiêu chuẩn được nêu trong hướng dẫn giới thiệu của tôi về quét web, tôi đã kiểm tra trang web và muốn trích xuất phần tử HTML lặp lại echo $PATH 5Bước đầu tiên, bạn có thể thử sử dụng BeautifulSoup để trích xuất thông tin này bằng tập lệnh sau echo $PATH 6Không ngờ khi chạy script python thì số kết quả trả về là 0 mặc dù trên web mình thấy rất nhiều kết quả echo $PATH 7Khi kiểm tra thêm trang, có nhiều tính năng động trên trang web cho thấy rằng javascript được sử dụng để trình bày các kết quả này. # add geckodriver to your PATH 9, có nhiều phần tử echo $PATH 50 đang được sử dụng và tìm kiếm phần tử ở trên có chứa dữ liệu mà chúng tôi quan tâm không trả về kết quả khớp. Cách tiếp cận đầu tiên để cạo trang web này là sử dụng trình điều khiển web Selenium để gọi trình duyệt, tìm kiếm các yếu tố quan tâm và trả về kết quả Cạo trang web bằng Selenium1. Selenium với con tắc kèVì chúng tôi không thể truy cập nội dung của trang web bằng Beautiful Soup, trước tiên chúng tôi cần thiết lập trình điều khiển web trong tập lệnh python của mình echo $PATH 0Như đã đề cập khi cài đặt geckodriver, nếu tệp thực thi không nằm trong đường dẫn thực thi, chúng tôi có thể xác định đường dẫn trong tập lệnh python của mình. Nếu nó nằm trong đường dẫn thực thi thì dòng trên sẽ trở thành echo $PATH 1Sau khi thiết lập, giờ đây chúng ta có thể kết nối với trang web và tìm các yếu tố quan tâm. Khi tải trang web trong trình duyệt, kết quả thường mất một lúc để tải và thậm chí có thể không tải cho đến khi chúng tôi cuộn trang xuống. Chúng tôi cũng thêm thời gian ngủ như một phương pháp khác để đợi trang tải đầy đủ echo $PATH 2Nếu chúng tôi chạy tập lệnh ngay bây giờ (bạn cũng có thể bỏ ghi chú echo $PATH 51 ở cuối để đảm bảo trình duyệt đóng), vì tập lệnh python của bạn chạy Firefox sẽ mở url được chỉ định và cuộn xuống trang. Hy vọng rằng bạn nên tải nhiều sản phẩm lên trước khi tập lệnh chạy xongTiếp theo, chúng tôi muốn có được các yếu tố quan tâm. Trước đây, khi sử dụng Beautiful Soup, chúng tôi đã cố gắng tìm tất cả các phần tử dựa trên thuộc tính thẻ và lớp, tuy nhiên, trong ví dụ này, chúng tôi sẽ sử dụng một cách tiếp cận hơi khác để truy cập thông tin sản phẩm. Thay vào đó, chúng ta có thể tìm kiếm các phần tử bằng xpath, dựa trên cấu trúc XML hoặc bộ chọn css Chúng tôi có thể kiểm tra phần tử quan tâm và trong thanh công cụ, nhấp chuột phải vào phần tử được tô sáng và Sao chép > Sao chép xpath (hoặc Sao chép bộ chọn). Đây là một cách thú vị khác để hiểu cấu trúc của html. Trong trường hợp này, chúng tôi sẽ sử dụng xpath để tìm các phần tử và sau đó chúng tôi có thể in số lượng kết quả phù hợp echo $PATH 4Một trong những lý do chính để sử dụng xpath thay vì sử dụng phần tử vì kết quả có một vài phần tử trong đó gốc của id là echo $PATH 52 với một số từ bổ sung, vì vậy hàm echo $PATH 53 đã được sử dụng để chọn tất cả các kết quả nhưng cũng để chọn echo $PATH 0Bây giờ chúng tôi có một số kết quả từ trang, chúng tôi có thể lặp lại từng kết quả và lưu dữ liệu quan tâm. Trong trường hợp này, chúng tôi có thể lưu tên sản phẩm và liên kết Lưu ý rằng thực tế có hơn 38 kết quả trên trang web. Con số này cũng có thể khác nhau tùy thuộc vào số lượng kết quả tải khi bạn kết nối với trang. Tất cả các kết quả có thể được thu thập bằng cách thay đổi javascript mà chúng tôi thực thi như đã đề xuất ở trên, hoặc các phương pháp khác sẽ được khám phá trong các phần sau echo $PATH 1Bên ngoài vòng lặp này, chúng tôi có thể đóng trình duyệt và khi chúng tôi nhập thư viện echo $PATH 55, chúng tôi có thể sử dụng thư viện đó bằng cách lưu dữ liệu mà chúng tôi đã thu thập vào một khung dữ liệu. Chúng tôi có thể in khung dữ liệu để xem nội dungecho $PATH 2Ở định dạng này, chúng ta có thể ghi dữ liệu này vào tệp csv một cách rất đơn giản echo $PATH 3Sử dụng Selenium với geckodriver là một cách nhanh chóng để cạo các trang web đang sử dụng javascript nhưng có một vài nhược điểm. Tôi nhận thấy rằng đôi khi trang không tải (tôi chắc chắn rằng điều này có thể hiệu quả hơn bằng cách thay đổi javascript mà chúng tôi thực thi như đã đề cập ở trên, nhưng tôi chưa quen với JS nên điều này có thể cần một chút thời gian), nhưng cũng tải trình duyệt Một tùy chọn khác, chúng ta có thể sử dụng trình duyệt không đầu. Điều này sẽ tăng tốc độ quét vì chúng tôi không phải đợi trình duyệt tải mỗi lần 2. Selenium với trình duyệt không đầuKhi sử dụng PhantomJS làm trình duyệt không đầu thay vì tắc kè, sự khác biệt duy nhất là cách trình điều khiển web được tải. Điều này có nghĩa là chúng ta có thể làm theo phương pháp trên nhưng thay đổi dòng khởi tạo trình điều khiển web trở thành echo $PATH 4Lưu ý ở đây rằng hỗ trợ Selenium cho PhantomJS đã bị loại bỏ và đưa ra cảnh báo Cũng có thể sử dụng chế độ không đầu với tắc kè bằng cách sử dụng tùy chọn không đầu echo $PATH 5Bằng cách sử dụng trình duyệt không đầu, chúng tôi sẽ thấy sự cải thiện về thời gian để tập lệnh chạy vì chúng tôi không mở trình duyệt nhưng không phải tất cả các kết quả đều được loại bỏ theo cách tương tự như sử dụng firefox webdriver ở chế độ bình thường Thực hiện một yêu cầu APICách tiếp cận cuối cùng mà chúng ta sẽ thảo luận trong hướng dẫn này là đưa ra yêu cầu đối với API. Khi kiểm tra các tệp XHR của trang Mạng, khi tải trang, trang này sẽ hiển thị các yêu cầu đang được thực hiện. Trong danh sách này là yêu cầu echo $PATH 56 gọi điểm cuối API để nhận kết quả được trình bày trên trangChúng tôi có thể thực hiện cùng một yêu cầu bằng ứng dụng khách REST hoặc với một vài dòng python Nếu chúng tôi kiểm tra tệp echo $PATH 57 và xem các tiêu đề, url yêu cầu chứa từ khóa và các tham số khác cần thiết để thực hiện yêu cầu. Bên dưới các chi tiết chung là các tiêu đề phản hồi và yêu cầu mà chúng tôi có thể cần sau nàyCông cụ kiểm tra hiển thị tiêu đề yêu cầu tìm kiếmĐể nhận được phản hồi, chúng tôi có thể lấy url yêu cầu và để kiểm tra, hãy nhập url này vào thanh địa chỉ của trình duyệt của bạn. Vì các tham số được thêm vào trong chuỗi, chúng tôi cũng có thể thử xóa tất cả trừ tham số từ khóa để kiểm tra xem có cần thêm tham số nào không. Trong trường hợp này, từ khóa truy vấn trả về kết quả trong trình duyệt, vì vậy chúng ta cũng có thể thực hiện yêu cầu tương tự bằng ứng dụng khách REST hoặc trong python Khách hàng mất ngủ RESTSử dụng chứng mất ngủ, chúng tôi có thể nhập url yêu cầu và gửi yêu cầu Điều này trả về một phản hồi JSON chứa dữ liệu mà chúng tôi đang tìm kiếm Xem trước phản hồi JSON trong InsomniaVí dụ này rất đơn giản mà không cần có tiêu đề hoặc mã thông báo bảo mật. Đối với các trường hợp khác, ứng dụng khách REST cho phép bạn nhập bất kỳ tham số phản hồi bổ sung nào mà bạn có thể nhận được từ công cụ kiểm tra khi thu thập chi tiết yêu cầu yêu cầu PythonChúng tôi cũng có thể thực hiện cùng một yêu cầu từ python bằng cách sử dụng thư viện echo $PATH 58 giống như cách chúng tôi kết nối với một trang web trước khi cạoPhản hồi JSON có thể dễ đọc hơn bằng cách thêm một vài tham số để thụt lề và sắp xếp các khóa để giờ đây chúng tôi có thể mở tệp và xem dữ liệu phản hồi được cung cấp cho trang web khi tìm kiếm được thực hiện echo $PATH 6Hiện tại, chúng tôi sẽ giữ tất cả dữ liệu. Hướng dẫn tiếp theo của tôi sẽ trình bày chi tiết hơn về cấu trúc dữ liệu và đầu ra để chúng ta có thể thao tác với JSON và tìm dữ liệu liên quan Tóm lượcHướng dẫn này đã phác thảo một số phương pháp chúng ta có thể sử dụng để loại bỏ các trang web sử dụng javascript. Những phương pháp này bao gồm Sử dụng trình điều khiển web để cạo nội dung
Thực hiện một yêu cầu HTTP
Mặc dù phương thức yêu cầu HTTP được triển khai nhanh hơn trong hướng dẫn này và cung cấp tất cả dữ liệu chúng tôi cần từ một yêu cầu, nhưng điều này không phải lúc nào cũng đúng. Không phải tất cả các trang web đều hiển thị yêu cầu của họ, bảo mật bổ sung có thể được áp dụng với mã thông báo xác thực hết hạn hoặc dữ liệu đầu ra có thể yêu cầu làm sạch đáng kể, điều này sẽ hiệu quả hơn so với sử dụng trình điều khiển web với một số javascript để cho phép tải tất cả kết quả và lặp qua tất cả các trang. Hướng dẫn này cung cấp một vài lựa chọn thay thế khác nhau mà bạn có thể thử để có thể cạo javascript Trong hướng dẫn tiếp theo của tôi, chúng ta sẽ khám phá cấu trúc dữ liệu, thao tác dữ liệu và ghi vào tệp đầu ra hoặc cơ sở dữ liệu Cảm ơn bạn đã đọc. Nếu bạn thích bài viết của tôi thì hãy đăng ký nhận bản tin hàng tháng của tôi, nơi bạn có thể nhận các bài viết mới nhất của tôi và các tài nguyên hàng đầu được gửi ngay đến hộp thư đến của bạn hoặc tìm hiểu thêm về những gì tôi đang làm trên trang web của mình Nếu bạn chưa quen với python hoặc muốn cải thiện, hãy xem bài viết của tôi với danh sách các tài nguyên học tập bao gồm các khóa học về khoa học dữ liệu |