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 vào dữ liệu có cấu trúc theo cách tự động với sự trợ giúp của việc quét web. Ví dụ: bạn có thể sử dụng web scraping cho: Infinite scrolling, còn được gọi là endless scrolling, 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 vào dữ liệu có cấu trúc theo cách tự động với sự trợ giúp của việc quét web. 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 độ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 cuộc 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 lợi thế, nhưng nó không được khuyến khích cho các nhiệm vụ tìm kiếm theo định hướng mục tiêu yêu cầu mọi người xác định vị trí nội dung cụ thể.
Trước tiên chúng ta hãy hiểu lợi ích của việc cạo các trang cuộn vô hạn.
Sau đây là một số lý do để cạo các trang cuộn vô hạn.
Ngoài những lợi ích trên của việc cạo các trang cuộn vô hạn, còn có một số nhược điểm như:
Hãy xem cách qué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ừ webdriver nhập khẩu selen
từ selenium.webdriver.common.keys nhập khóa
Thời gian nhập khẩu
Ở đây bạn phải chọn trình duyệt mà bạn muốn sử dụng. Chúng tôi sẽ đi với Chrome vì nó cung cấp nhiều tùy chọn hơn Firefox.
def get_selenium():
Tùy chọn = Webdriver. ChromeOptions()
Tùy chọn.add_argument('--ignore-certificate-errors')
Tùy chọn.add_argument('--ẩn danh')
Tùy chọn.add_argument('không đầu')
Trình điều khiển = Webdriver. Chrome(chrome_options=tùy chọn)
Trả lại (tài xế)
Lập luận không đầu được đề cập ở trên là khá quan trọng. Selenium sẽ không mở Chrome trong một cửa sổ mới khi nó chạy không đầu bằng Python. Tuy nhiên, nếu bạn gặp sự cố trong khi cạo, bạn có thể nhận xét về tùy chọn không đầu và xem những gì đang xảy ra trong Chrome và những gì được tải trên trang.
Chúng ta có thể bỏ qua hai lá cờ i-e; bỏ qua-chứng chỉ-lỗi và ẩn danh.
Nếu bạn gặp 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à mất nhiều thời gian để gỡ lỗi.
Bạn cần xem xét cấu trúc HTML trang của mình để sửa lỗi cuộn vô hạn và làm theo các bước được đề cập bên dưới.
Bạn có thể xem xét ví dụ dưới đây để hiểu rõ hơn.
selen = get_selenium()
selenium.get("của bạn / 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(cuộn)
Thời gian. ngủ(3)
nếu (last_elem == current_elem)
phá vỡ
khác
last_elem = current_elem
Trong đoạn code trên, chúng ta đã sử dụng jQuery và Javascript bên trong Python.
Ở đây
selen. get("của bạn/url.com/{0}".định dạng (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 kép và dấu ngoặc kép và các ký tự thoát.
Một số vấn đề thường xảy ra khi thực hiện cuộn vô hạn là:
Có thể kích hoạt một tập lệnh js từ bên trong Python và kết quả là nhận được một danh sách.
Ví dụ: chúng ta có thể sử dụng mã bên dưới để lấy nguồn từ tất cả các hình ảnh trên trang.
js_script = '''\
var jslist = []
document.querySelectorAll('img').forEach(i => jslist.push(i.src));
trả lại 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 script với selenium.execute_script(). Sau đó, chúng ta có thể lưu trữ giá trị trả về bởi js trong một biến python i-e., python_list.
Đây là cách chúng ta có thể cạo 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 hoạt động như một 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'% hostname +":"+port)
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 proxy cuộn hỗ trợ cuộn theo chương trình của các chế độ xem có thể cuộn trong 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 --save
Sau khi cài đặt scroll-proxy, bạn có thể khởi tạo một đối tượng ScrollProxy bằng cách sử dụng mã dưới đây.
var myScroll = ScrollProxy mới ();
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ì nó sẽ báo cáo các hành động theo mặc định khi người dùng cuộn trang.
Tuy nhiên, nếu bạn muốn nhận các bản cập nhật khi người dùng cuộn bên trong một số phần tử HTML cụ thể, bạn phải chuyển nó vào hàm tạo.
var myDiv = tài liệu. querySelector('.scrollable');
var myDivScroll = ScrollProxy mới (myDiv);
Dưới đây là một số lý do để sử dụng proxy trong khi quét cuộn vô hạn.
Chúng tôi đã thảo luận rằng cuộn vô hạn được ưa thích 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 truyền thông xã hội liên tục tạo nội dung mới có thể được hưởng lợi từ việc cuộn vô hạn. Mặt khác, các trang kinh doanh và trang web thương mại điện tử không phải là ứng cử viên tốt cho việc cuộn vô hạn khi 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 cạo các trang cuộn vô hạn bằng Selenium. Chúng tôi cũng có thể sử dụng proxy dân cư xoay vòng để 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 tôi.
Hy vọng bạn đã hiểu về cách cạo các trang cuộn vô hạn bằng Python.