Hướng dẫn is web scraping in python hard? - Tìm kiếm web trong python có khó không?
Nói tóm lại, nếu bạn không có kiến thức hoặc kinh nghiệm lập trình, điều này sẽ khá khó khăn. Kỹ năng Excel là tuyệt vời, nhưng chúng loại nhạt so với các kỹ năng cần thiết để viết một ứng dụng thực sự. Tuy nhiên, tôi nghĩ rằng việc xây dựng một máy cạo web là một dự án học tập hoàn toàn tuyệt vời! Nếu bạn muốn học, đây sẽ là một điểm khởi đầu tuyệt vời. Bạn có thể mất một vài tháng nếu bạn bắt đầu không có kinh nghiệm, nhưng bạn phải bắt đầu ở đâu đó. Show
Nếu bạn muốn tự làm điều này, đây là các khái niệm bạn cần học: -Basic HTML (bao gồm cả DOM, v.v.) -Đây là những gì trang bạn đang cạo được tạo từ. Bạn cần phải hiểu những thứ này trước khi bạn thực sự có thể làm bất cứ điều gì. -Basic JavaScript và JQuery -Đây là những gì bạn sử dụng để xác định vị trí các yếu tố cụ thể trong trang (tức là bảng dòng), đi qua các phần tử con của chúng (tức là mỗi hàng chứa thông tin người chơi) và trích xuất thông tin cần thiết. -Ajax (sử dụng jQuery; thực sự điều này có thể được gộp lại với bước trước) -đây là những gì bạn cần sử dụng để truy xuất dữ liệu (tức là trang HTML) từ trang web. Với các công cụ này, bạn có thể xây dựng một ứng dụng quét web khá cơ bản. Trên đường đi, bạn có thể chọn những thứ khác như kiểu dáng với CSS hoặc tạo phần phụ trợ bằng PHP/Rails/Django hoặc bất cứ thứ gì khác. Nếu không, nếu bạn nghiêm túc về việc trả tiền cho ai đó để làm điều này cho bạn ... hãy gửi tin nhắn cho tôi. Scraping là một khái niệm đơn giản trong bản chất của nó, nhưng nó cũng khó khăn cùng một lúc. Nó giống như một trò chơi mèo và chuột giữa chủ sở hữu trang web và nhà phát triển hoạt động trong một khu vực màu xám hợp pháp. Bài viết này làm sáng tỏ một số vật cản mà một lập trình viên có thể phải đối mặt trong khi quét web, và những cách khác nhau để đi xung quanh chúng. Xin lưu ý rằng tầm quan trọng của việc cạo râu với sự tôn trọng. Web Scraping là gì?Xóa web, theo thuật ngữ đơn giản, là hành động trích xuất dữ liệu từ các trang web. Nó có thể là một quy trình thủ công hoặc một quy trình tự động. Tuy nhiên, trích xuất dữ liệu theo cách thủ công từ các trang web có thể là một quy trình tẻ nhạt và dự phòng, điều này biện minh cho toàn bộ hệ sinh thái gồm nhiều công cụ và thư viện được xây dựng để tự động hóa quá trình chiết xuất dữ liệu. Trong việc quét web tự động, thay vì để cho trình duyệt hiển thị các trang cho chúng tôi, chúng tôi sử dụng các tập lệnh tự viết để phân tích phản hồi thô từ máy chủ. Từ bây giờ trở đi trong bài đăng, chúng tôi sẽ chỉ sử dụng thuật ngữ "Scraping Web" để ngụ ý "Xóa web tự động". Làm thế nào được thực hiện quét web?Trước khi chúng ta chuyển sang những thứ có thể làm cho việc cạo trở nên khó khăn, hãy chia nhỏ quá trình quét web thành các bước rộng:
Bước đầu tiên liên quan đến việc sử dụng các công cụ trình duyệt tích hợp (như Chrome Devtools và Firefox Developer Tools) để xác định thông tin chúng tôi cần trên trang web và xác định các cấu trúc/mẫu để trích xuất theo chương trình. Các bước sau đây liên quan đến việc thực hiện các yêu cầu một cách có phương pháp đến trang web và thực hiện logic để trích xuất thông tin, sử dụng các mẫu chúng tôi đã xác định. Cuối cùng, chúng tôi sử dụng thông tin cho bất kỳ mục đích nào chúng tôi dự định. Ví dụ: giả sử chúng tôi muốn trích xuất số lượng người đăng ký của PewDiePie và so sánh nó với T-series. Một tìm kiếm đơn giản của Google dẫn tôi đến trang số đăng ký YouTube thời gian thực của Socialblade. Từ kiểm tra trực quan, chúng tôi thấy rằng số lượng thuê bao nằm trong thẻ Hãy viết một hàm Python đơn giản để có được giá trị này. Chúng tôi sẽ sử dụng đẹp để phân tích HTML.
Hãy xem số đếm ngay bây giờ:
Có vẻ như là một quá trình dễ dàng, phải không? Điều gì có thể sai? Câu trả lời cho điều này chủ yếu phụ thuộc vào cách lập trình trang web và ý định của chủ sở hữu trang web. Họ có thể cố tình giới thiệu sự phức tạp để làm cho quá trình cạo trở nên khó khăn. Một số phức tạp rất dễ dàng để có được, và một số không. Hãy liệt kê từng sự phức tạp này từng cái một và xem các giải pháp cho chúng trong phần tiếp theo. Sự phức tạp của việc quét webTải không đồng bộ và kết xuất phía máy kháchNhững gì bạn thấy không phải là những gì bạn nhận được. Đây là một trong những vấn đề phổ biến nhất mà các nhà phát triển phải đối mặt khi cạo một trang web nặng JavaScript. Phản hồi ban đầu mà chúng tôi nhận được từ máy chủ có thể không chứa thông tin mà chúng tôi mong đợi theo kiểm tra trực quan. Điều này xảy ra bởi vì thông tin mà chúng tôi thực sự đang tìm kiếm được hiển thị ở phía trình duyệt bởi các thư viện như tay lái hoặc phản ứng hoặc tìm nạp bằng cách thực hiện các cuộc gọi AJAX trong tương lai đến máy chủ và sau đó được trình duyệt hiển thị. Một vài ví dụ về điều này bao gồm:
Xác thựcNhiều trang web có một số loại xác thực mà chúng ta sẽ phải chăm sóc trong chương trình cạo của chúng ta. Đối với các trang web đơn giản hơn, xác thực có thể dễ dàng như thực hiện yêu cầu POST với tên người dùng và mật khẩu hoặc lưu trữ cookie. Tuy nhiên, cũng có thể có những sự tinh tế nhất định như:
Nếu chúng ta lấy lại mã phản hồi sau từ máy chủ, thì có lẽ đó là một dấu hiệu cho thấy chúng ta cần có quyền xác thực để có thể cạo.
Danh sách đen phía máy chủNhư chúng tôi đã đề cập trước đó, câu trả lời cho "Điều gì có thể sai trong khi cạo?" Cũng phụ thuộc vào mục đích của chủ sở hữu trang web. Có thể có các cơ chế chống xẹp được thiết lập ở phía máy chủ để phân tích các mẫu lưu lượng và duyệt đến và chặn các chương trình tự động duyệt trang web của họ. Những ý tưởng đơn giản để phân tích như vậy bao gồm: Phân tích tỷ lệ yêu cầuNếu máy chủ nhận được quá nhiều yêu cầu trong khung thời gian từ máy khách, thì đó là một lá cờ đỏ mà có trình duyệt của con người ở đầu kia. Thậm chí tệ hơn là nhận được các yêu cầu song song từ một IP. Một lá cờ đỏ khác là sự lặp lại (khách hàng thực hiện các yêu cầu X mỗi giây). Các máy chủ có thể đo các số liệu như vậy và xác định các ngưỡng vượt quá mà họ có thể đưa vào danh sách khách hàng. Các cơ chế có thể phức tạp hơn nhiều so với điều này, nhưng bạn có ý tưởng. Việc cấm khách hàng thường là tạm thời (có lợi cho Internet miễn phí và mở cho tất cả mọi người), nhưng trong một số trường hợp, nó thậm chí có thể là vĩnh viễn. Kiểm tra các tiêu đề yêu cầu cũng là một kỹ thuật được sử dụng bởi một số trang web để phát hiện người dùng không phải người. Ý tưởng là so sánh các trường tiêu đề đến với các trường dự kiến sẽ được gửi bởi người dùng thực. Ví dụ: một số công cụ và thư viện nhất định gửi một tác nhân người dùng rất khác biệt trong khi thực hiện yêu cầu đến máy chủ, vì vậy các máy chủ có thể chọn chọn lọc chỉ cho phép một vài tác nhân người dùng và lọc phần còn lại. Ngoài ra, một số trang web có thể phục vụ nội dung khác nhau cho các tác nhân người dùng khác nhau, phá vỡ logic cạo của bạn. HoneypotsChủ sở hữu của trang web có thể thiết lập các bẫy dưới dạng liên kết trong HTML không hiển thị cho người dùng trên trình duyệt - cách dễ nhất để thực hiện điều này là đặt CSS là Phát hiện mẫuĐiều này liên quan đến các mẫu rất xác định theo cách trang web được duyệt (thời gian trong các lần nhấp, vị trí của các nhấp chuột, v.v.). Các mẫu này có thể được phát hiện bằng các cơ chế chống bò ở đầu máy chủ, dẫn đến danh sách đen. Mã trạng thái phản hồi có thể báo hiệu danh sách đen của máy chủ bao gồm:
Chuyển hướng và captchasMột số trang web chỉ đơn giản là chuyển hướng ánh xạ liên kết cũ của họ sang các trang mới hơn (như chuyển hướng liên kết Ngoài ra, để lọc các máy khách đáng ngờ, các máy chủ có thể chuyển hướng các yêu cầu đến các trang có chứa captchas kỳ quặc, mà máy cạo web của chúng tôi cần giải quyết để chứng minh rằng "đó là con người". Các công ty như Cloudflare, nơi cung cấp các dịch vụ chống BOT hoặc DDOS, khiến các bot thậm chí còn khó khăn hơn trong việc đưa nó vào nội dung thực tế. Sự phức tạp về cấu trúcĐiều hướng phức tạpĐôi khi thật khó để bò qua tất cả các trang web và thu thập thông tin. Ví dụ, phân trang có thể là khó khăn để có được xung quanh nếu mỗi trang trong phân trang không có URL duy nhất hoặc nếu nó tồn tại, nhưng không có mẫu nào có thể được quan sát để tính toán các URL đó. HTML không cấu trúcĐây là khi máy chủ đang gửi HTML nhưng không liên tục cung cấp một mẫu. Ví dụ: các lớp và thuộc tính CSS được tạo động ở đầu máy chủ và là duy nhất mọi lúc. Đôi khi, HTML không cấu trúc cũng là hậu quả của lập trình xấu. |