Trong thế giới ngày nay, mọi người đều sử dụng các công nghệ mới. Bạn có thể truy cập dữ liệu có cấu trúc theo cách tự động với sự trợ giúp của web scraping. Ví dụ, bạn có thể sử dụng web scraping để: Cuộn vô hạn, còn được gọi là cuộn vô tận, là một kỹ thuật thiết kế web mà các trang web thường sử dụng với AJAX hoặc Javascript
Trong thế giới ngày nay, mọi người đều sử dụng các công nghệ mới. Bạn có thể truy cập dữ liệu có cấu trúc theo cách tự động với sự trợ giúp của web scraping. Ví dụ, bạn có thể sử dụng web scraping cho:
Cuộn vô hạn, còn được gọi là cuộn vô tận, là một kỹ thuật thiết kế web mà các trang web thường sử dụng với AJAX hoặc Javascript để tải nội dung bổ sung một cách động khi người dùng cuộn xuống cuối trang web. Kỹ thuật này trở nên phổ biến do thành công của nó trên các trang mạng xã hội. Ví dụ, cuộn vô hạn trong Twitter được tạo ra thông qua tải không đồng bộ. Twitter thực hiện các lệnh gọi AJAX sau khi trang được tải để liên tục thêm nội dung mới khi cuộn. Mặc dù cuộn vô hạn có nhiều ưu điểm, nhưng không nên sử dụng cho các tác vụ tìm kiếm theo mục tiêu yêu cầu mọi người phải định vị nội dung cụ thể.
Trước tiên, chúng ta hãy tìm hiểu lợi ích của việc thu thập các trang cuộn vô hạn.
Sau đây là một số lý do để thu thập các trang cuộn vô hạn.
Ngoài những lợi ích nêu trên của việc thu thập các trang cuộn vô hạn, còn có một số nhược điểm như:
Hãy cùng xem cách trích xuất các trang cuộn vô hạn bằng Python với sự trợ giúp của các bước được đề cập bên dưới.
Bạn cần nhập thư viện Selenium.
từ selenium nhập webdriver từ selenium.webdriver.common.keys nhập Keys nhập thời gian
Ở đây bạn phải chọn trình duyệt mà bạn muốn sử dụng. Chúng tôi sẽ chọn Chrome vì nó cung cấp nhiều tùy chọn hơn Firefox.
def get_selenium(): options = webdriver.ChromeOptions() options .add_argument( '--ignore-certificate-errors' ) options .add_argument( '--incognito' ) options .add_argument( 'headless' ) driver = webdriver.Chrome(chrome_options= options ) return (trình điều khiển)
Đối số headless được đề cập ở trên khá quan trọng. Selenium sẽ không mở Chrome trong một cửa sổ mới khi chạy headless trong Python. Tuy nhiên, nếu bạn gặp sự cố khi đang thu thập dữ liệu, bạn có thể bình luận về tùy chọn headless và xem những gì đang diễn ra trong Chrome và những gì được tải trên trang.
Chúng ta có thể bỏ qua hai cờ là: ignore-certificate-errors và incognito.
Nếu bạn gặp phải captcha hoặc biểu ngữ cookie ngăn trang của bạn tải, bạn có thể nhấp vào OK và tiếp tục đến trang bình thường. Tuy nhiên, nếu trình duyệt bị đóng đột ngột, bạn có thể sử dụng time.sleep() để tạm dừng mã và dành nhiều thời gian để gỡ lỗi.
Bạn cần xem xét cấu trúc HTML của trang để sửa lỗi cuộn vô hạn và làm theo các bước dưới đây.
Bạn có thể xem xét ví dụ dưới đây để hiểu rõ hơn.
selenium = get_selenium() selenium.get( "your/url" ) last_elem = '' ; trong khi True : current_last_elem = "#my-div > ul > li:last-child" scroll = "document.querySelector(\'" + current_last_elem + "\').scrollIntoView();" selenium.execute_script(scroll) time. sleep ( 3 ) nếu (last_elem == current_elem) ngắt nếu không thì last_elem = current_elem
Trong đoạn mã trên, chúng tôi đã sử dụng jQuery và Javascript bên trong Python.
Đây,
selenium.get ( "your/url.com/{0}" .format (từ khóa))
"document.querySelector( \' " + .. + " \' ).scrollIntoView();"
Ở đây, định dạng của bạn phải chính xác, vì vậy bạn cần chú ý đến dấu ngoặc đơn, dấu ngoặc kép và ký tự thoát.
Sau đây là một số vấn đề thường gặp khi thực hiện cuộn vô hạn:
Có thể kích hoạt một tập lệnh js từ bên trong Python và nhận được một danh sách kết quả.
Ví dụ, chúng ta có thể sử dụng mã bên dưới để lấy nguồn từ tất cả hình ảnh trên trang.
js_script = '''\ var jslist = [] document.querySelectorAll('img').forEach(i => jslist.push(i.src)); trả về jslist; ''' python_list = selenium.execute_script(js_script)
Trong đoạn mã trên,
Chúng ta có thể sử dụng cách tiếp cận tương tự cho các liên kết href bằng cách:
Sau đó, chúng ta có thể chạy tập lệnh bằng selenium.execute_script(). Sau đó, chúng ta có thể lưu trữ giá trị trả về của js trong một biến python, ví dụ như python_list.
Đây là cách chúng ta có thể thu thập các trang cuộn vô hạn bằng Python.
Bạn biết rằng proxy là máy chủ của bên thứ ba đóng vai trò trung gian giữa máy khách yêu cầu tài nguyên và máy chủ cung cấp tài nguyên đó. Nếu bạn muốn sử dụng proxy với Selenium và Python, bạn có thể sử dụng các dòng mã sau.
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument( '--proxy-server=%s' % tên máy chủ + ":" +cổng) trình điều khiển = webdriver.Chrome( chrome_options =chrome_options)
Để xử lý cuộn vô hạn, bạn có thể sử dụng scroll-proxy hỗ trợ cuộn theo chương trình của các chế độ xem có thể cuộn trong một hệ thống phân cấp chế độ xem. Nếu bạn sử dụng npm, bạn có thể cài đặt scroll-proxy bằng lệnh bên dưới. Chúng tôi sẽ sử dụng js để chứng minh việc sử dụng scroll-proxy.
npm cài đặt scroll -proxy -- lưu
Sau khi cài đặt scroll-proxy, bạn có thể khởi tạo đối tượng ScrollProxy bằng cách sử dụng đoạn mã bên dưới.
var myScroll = new ScrollProxy ();
Bạn có thể thấy chúng tôi không truyền bất kỳ đối số nào cho hàm tạo ScrollProxy vì theo mặc định, nó sẽ báo cáo các hành động khi người dùng cuộn trang.
Tuy nhiên, nếu bạn muốn nhận được thông tin cập nhật khi người dùng cuộn bên trong một phần tử HTML cụ thể, bạn phải truyền phần tử đó vào hàm tạo.
var myDiv = document .querySelector ( '.scrollable' ); var myDivScroll = new ScrollProxy(myDiv);
Dưới đây là một số lý do để sử dụng proxy khi thu thập dữ liệu cuộn vô hạn.
Chúng tôi đã thảo luận rằng cuộn vô hạn được ưa chuộng khi người dùng không tìm kiếm thông tin cụ thể. Các trang web tin tức và nguồn cấp dữ liệu phương tiện truyền thông xã hội liên tục tạo nội dung mới có thể hưởng lợi từ cuộn vô hạn. Mặt khác, các trang kinh doanh và trang thương mại điện tử không phải là ứng cử viên tốt cho cuộn vô hạn vì người dùng tìm kiếm thông tin cụ thể. Hơn nữa, chúng tôi đã thảo luận về các bước liên quan đến việc thu thập các trang cuộn vô hạn bằng Selenium. Chúng ta cũng có thể sử dụng proxy dân dụng luân phiên để xử lý cuộn vô hạn vì chúng giúp tránh captcha và lọc các yêu cầu tiêu đề đáng ngờ của chúng ta.
Hy vọng bạn đã hiểu được cách thu thập các trang cuộn vô hạn bằng Python.