Lưu ý: Vì phiên bản hoàn chỉnh của câu trả lời này vượt quá giới hạn độ dài của Stack Overflow, bạn sẽ cần đến GitHub để đọc phiên bản mở rộng, với nhiều mẹo và chi tiết hơn.
Để cản trở việc cạo (còn được gọi là Webscraping , Screenscraping , khai thác dữ liệu Web , thu hoạch Web hoặc trích xuất dữ liệu Web ), giúp biết cách các công cụ dọn dẹp này hoạt động và, bằng cách mở rộng, điều gì ngăn chúng hoạt động tốt.
Có nhiều loại cạp khác nhau và mỗi loại hoạt động khác nhau:
Các trình thu thập dữ liệu , chẳng hạn như bot của Google hoặc máy photocopy trang web như HTtrack , theo dõi đệ quy các liên kết đến các trang khác để lấy dữ liệu. Chúng đôi khi được sử dụng để quét mục tiêu để có được dữ liệu cụ thể, thường được kết hợp với trình phân tích cú pháp HTML để trích xuất dữ liệu mong muốn từ mỗi trang.
Shell script: Đôi khi, các công cụ Unix phổ biến được sử dụng để quét: Wget hoặc Curl để tải xuống các trang và Grep (Regex) để trích xuất dữ liệu.
Các trình phân tích cú pháp HTML, chẳng hạn như các trình phân tích dựa trên Jsoup, Scrapy và các trình phân tích khác. Tương tự như các regex dựa trên shell-script, chúng hoạt động bằng cách trích xuất dữ liệu từ các trang dựa trên các mẫu trong HTML, thường bỏ qua mọi thứ khác.
Ví dụ: Nếu trang web của bạn có tính năng tìm kiếm, một người quét như vậy có thể gửi yêu cầu tìm kiếm, sau đó nhận tất cả các liên kết kết quả và tiêu đề của họ từ trang kết quả HTML, để chỉ nhận được liên kết kết quả tìm kiếm và tiêu đề của họ . Đây là những phổ biến nhất.
Screenscrapers, dựa trên ví dụ. Selenium hoặc PhantomJS , mở trang web của bạn trong một trình duyệt thực, chạy JavaScript, AJAX, v.v., sau đó lấy văn bản mong muốn từ trang web, thường là bằng cách:
Lấy HTML từ trình duyệt sau khi trang của bạn đã được tải và JavaScript đã chạy, sau đó sử dụng trình phân tích cú pháp HTML để trích xuất dữ liệu mong muốn. Đây là những cách phổ biến nhất và rất nhiều phương pháp để phá vỡ trình phân tích cú pháp / trình dọn dẹp HTML cũng hoạt động ở đây.
Chụp ảnh màn hình của các trang được hiển thị, sau đó sử dụng OCR để trích xuất văn bản mong muốn từ ảnh chụp màn hình. Đây là những thứ hiếm, và chỉ những người dọn dẹp chuyên dụng thực sự muốn dữ liệu của bạn mới thiết lập được điều này.
Các dịch vụ quét web như ScrapingHub hoặc Kimono . Trên thực tế, có những người có công việc là tìm ra cách cạo trang web của bạn và lấy nội dung cho người khác sử dụng.
Không có gì đáng ngạc nhiên, các dịch vụ cạo chuyên nghiệp là khó khăn nhất để ngăn chặn, nhưng nếu bạn làm cho nó khó khăn và tốn thời gian để tìm ra cách để cạo trang web của bạn, những người này (và những người trả tiền cho họ để làm như vậy) có thể không bị làm phiền để cạo trang web của bạn.
Nhúng trang web của bạn vào các trang của trang web khác bằng khung và nhúng trang web của bạn vào các ứng dụng di động.
Mặc dù không cào bằng kỹ thuật, các ứng dụng di động (Android và iOS) có thể nhúng các trang web và tiêm CSS và JavaScript tùy chỉnh, do đó thay đổi hoàn toàn giao diện của các trang của bạn.
Sao chép - dán: Mọi người sẽ sao chép và dán nội dung của bạn để sử dụng nó ở nơi khác.
Có rất nhiều sự chồng chéo giữa các loại cạp khác nhau và nhiều người dọn dẹp sẽ hành xử tương tự, ngay cả khi họ sử dụng các công nghệ và phương pháp khác nhau.
Những lời khuyên này chủ yếu là những ý tưởng của riêng tôi, những khó khăn khác nhau mà tôi đã gặp phải khi viết các mẩu tin lưu niệm, cũng như các thông tin và ý tưởng từ khắp nơi đan xen.
Làm thế nào để ngừng cạo
Bạn hoàn toàn không thể ngăn chặn nó , vì dù bạn có làm gì đi nữa, những người dọn dẹp xác định vẫn có thể tìm ra cách cạo. Tuy nhiên, bạn có thể ngăn chặn rất nhiều việc cào bằng cách thực hiện một số điều:
Giám sát nhật ký và mẫu lưu lượng truy cập của bạn; giới hạn quyền truy cập nếu bạn thấy hoạt động bất thường:
Kiểm tra nhật ký của bạn thường xuyên và trong trường hợp có hoạt động bất thường cho thấy truy cập tự động (người dọn dẹp), chẳng hạn như nhiều hành động tương tự từ cùng một địa chỉ IP, bạn có thể chặn hoặc giới hạn quyền truy cập.
Cụ thể, một số ý tưởng:
Giới hạn tỷ lệ:
Chỉ cho phép người dùng (và người dọn dẹp) thực hiện một số hành động giới hạn trong một thời gian nhất định - ví dụ: chỉ cho phép một vài tìm kiếm mỗi giây từ bất kỳ địa chỉ IP hoặc người dùng cụ thể nào. Điều này sẽ làm chậm các phế liệu, và làm cho chúng không hiệu quả. Bạn cũng có thể hiển thị captcha nếu các hành động được hoàn thành quá nhanh hoặc nhanh hơn so với người dùng thực sự.
Phát hiện hoạt động bất thường:
Nếu bạn thấy hoạt động bất thường, chẳng hạn như nhiều yêu cầu tương tự từ một địa chỉ IP cụ thể, ai đó đang xem quá nhiều trang hoặc thực hiện số lượng tìm kiếm bất thường, bạn có thể ngăn truy cập hoặc hiển thị hình ảnh xác thực cho các yêu cầu tiếp theo.
Không chỉ giám sát và giới hạn tỷ lệ theo địa chỉ IP - cũng sử dụng các chỉ số khác:
Nếu bạn chặn hoặc giới hạn tốc độ, đừng chỉ thực hiện trên cơ sở địa chỉ trên mỗi IP; bạn có thể sử dụng các chỉ số và phương pháp khác để xác định người dùng hoặc người dọn dẹp cụ thể. Một số chỉ số có thể giúp bạn xác định người dùng / người dọn dẹp cụ thể bao gồm:
Người dùng nhanh chóng điền vào biểu mẫu như thế nào và vị trí trên nút họ nhấp vào;
Bạn có thể thu thập nhiều thông tin bằng JavaScript, chẳng hạn như kích thước / độ phân giải màn hình, múi giờ, phông chữ được cài đặt, v.v; bạn có thể sử dụng điều này để xác định người dùng.
Tiêu đề HTTP và thứ tự của chúng, đặc biệt là User-Agent.
Ví dụ: nếu bạn nhận được nhiều yêu cầu từ một địa chỉ IP duy nhất, tất cả đều sử dụng cùng một Tác nhân người dùng, kích thước màn hình (được xác định bằng JavaScript) và người dùng (cạp trong trường hợp này) luôn nhấp vào nút theo cùng một cách và tại khoảng thời gian đều đặn, nó có thể là một dụng cụ cạo màn hình; và bạn có thể tạm thời chặn các yêu cầu tương tự (ví dụ: chặn tất cả các yêu cầu với tác nhân người dùng và kích thước màn hình đến từ địa chỉ IP cụ thể đó) và theo cách này bạn sẽ không gây bất tiện cho người dùng thực trên địa chỉ IP đó, ví dụ: trong trường hợp kết nối internet được chia sẻ.
Bạn cũng có thể thực hiện điều này hơn nữa, vì bạn có thể xác định các yêu cầu tương tự, ngay cả khi chúng đến từ các địa chỉ IP khác nhau, biểu thị cho việc nạo vét phân tán (một máy quét sử dụng botnet hoặc mạng proxy). Nếu bạn nhận được rất nhiều yêu cầu giống hệt nhau, nhưng chúng đến từ các địa chỉ IP khác nhau, bạn có thể chặn. Một lần nữa, lưu ý không vô tình chặn người dùng thực.
Điều này có thể hiệu quả đối với các trình sàng lọc chạy JavaScript, vì bạn có thể nhận được nhiều thông tin từ họ.
Các câu hỏi liên quan về Trao đổi ngăn xếp bảo mật:
Thay vì tạm thời chặn truy cập, hãy sử dụng Captcha:
Cách đơn giản để thực hiện giới hạn tỷ lệ là tạm thời chặn quyền truy cập trong một khoảng thời gian nhất định, tuy nhiên sử dụng Captcha có thể tốt hơn, hãy xem phần trên Captchas.
Yêu cầu đăng ký và đăng nhập
Yêu cầu tạo tài khoản để xem nội dung của bạn, nếu điều này khả thi cho trang web của bạn. Đây là một công cụ răn đe tốt cho người dọn dẹp, nhưng cũng là một công cụ răn đe tốt cho người dùng thực sự.
- Nếu bạn yêu cầu tạo tài khoản và đăng nhập, bạn có thể theo dõi chính xác các hành động của người dùng và người quét. Bằng cách này, bạn có thể dễ dàng phát hiện khi một tài khoản cụ thể đang được sử dụng để cạo và cấm nó. Những việc như giới hạn tỷ lệ hoặc phát hiện lạm dụng (chẳng hạn như một số lượng lớn các tìm kiếm trong một thời gian ngắn) trở nên dễ dàng hơn, vì bạn có thể xác định các người dọn rác cụ thể thay vì chỉ địa chỉ IP.
Để tránh các tập lệnh tạo nhiều tài khoản, bạn nên:
Yêu cầu một địa chỉ email để đăng ký và xác minh địa chỉ email đó bằng cách gửi một liên kết phải được mở để kích hoạt tài khoản. Chỉ cho phép một tài khoản cho mỗi địa chỉ email.
Yêu cầu một captcha được giải quyết trong quá trình đăng ký / tạo tài khoản.
Yêu cầu tạo tài khoản để xem nội dung sẽ khiến người dùng và công cụ tìm kiếm tránh xa; nếu bạn yêu cầu tạo tài khoản để xem bài viết, người dùng sẽ đi nơi khác.
Chặn truy cập từ lưu trữ đám mây và quét địa chỉ IP dịch vụ
Đôi khi, người dọn dẹp sẽ được chạy từ các dịch vụ lưu trữ web, chẳng hạn như Amazon Web Services hoặc GAE hoặc VPS. Giới hạn quyền truy cập vào trang web của bạn (hoặc hiển thị hình ảnh xác thực) cho các yêu cầu xuất phát từ địa chỉ IP được sử dụng bởi các dịch vụ lưu trữ đám mây đó.
Tương tự, bạn cũng có thể giới hạn quyền truy cập từ các địa chỉ IP được sử dụng bởi các nhà cung cấp proxy hoặc VPN, vì người dọn dẹp có thể sử dụng các máy chủ proxy đó để tránh nhiều yêu cầu được phát hiện.
Coi chừng rằng bằng cách chặn truy cập từ máy chủ proxy và VPN, bạn sẽ ảnh hưởng tiêu cực đến người dùng thực.
Tạo thông báo lỗi của bạn không cần thiết nếu bạn chặn
Nếu bạn thực hiện truy cập chặn / giới hạn, bạn nên đảm bảo rằng bạn không nói cho người quét biết nguyên nhân gây ra khối đó, từ đó cung cấp cho họ manh mối về cách khắc phục cạp của họ. Vì vậy, một ý tưởng tồi sẽ là hiển thị các trang lỗi với văn bản như:
Quá nhiều yêu cầu từ địa chỉ IP của bạn, vui lòng thử lại sau.
Lỗi, tiêu đề Tác nhân người dùng không có mặt!
Thay vào đó, hãy hiển thị một thông báo lỗi thân thiện mà không nói cho người cạo biết nguyên nhân gây ra nó. Một cái gì đó như thế này là tốt hơn nhiều:
- Xin lỗi, có lỗi xảy ra. Bạn có thể liên hệ với bộ phận hỗ trợ qua
helpdesk@example.com
, nếu vấn đề vẫn còn.
Điều này cũng thân thiện với người dùng hơn rất nhiều đối với người dùng thực, nếu họ từng thấy một trang lỗi như vậy. Bạn cũng nên xem xét hiển thị hình ảnh xác thực cho các yêu cầu tiếp theo thay vì khối cứng, trong trường hợp người dùng thực sự nhìn thấy thông báo lỗi, để bạn không chặn và do đó khiến người dùng hợp pháp liên hệ với bạn.
Sử dụng Captchas nếu bạn nghi ngờ rằng trang web của bạn đang bị truy cập bởi một người quét.
Captchas ("Thử nghiệm hoàn toàn tự động để phân biệt máy tính và con người") rất hiệu quả trong việc ngăn chặn người dọn dẹp. Thật không may, chúng cũng rất hiệu quả trong việc gây khó chịu cho người dùng.
Như vậy, chúng rất hữu ích khi bạn nghi ngờ một công cụ cạo có thể và muốn dừng việc cạo, mà không chặn truy cập trong trường hợp đó không phải là một công cụ cạo mà là một người dùng thực sự. Bạn có thể muốn xem xét hiển thị một hình ảnh xác thực trước khi cho phép truy cập vào nội dung nếu bạn nghi ngờ một người cạo.
Những điều cần lưu ý khi sử dụng Captchas:
Đừng tự mình sử dụng, hãy sử dụng một cái gì đó như reCaptcha của Google : Dễ dàng hơn nhiều so với việc tự mình thực hiện captcha, nó thân thiện với người dùng hơn một số giải pháp văn bản mờ và bị vênh mà bạn có thể tự mình tìm ra (người dùng thường chỉ cần đánh dấu vào một hộp ) và điều đó cũng khó hơn rất nhiều đối với một người viết kịch bản để giải quyết hơn là một hình ảnh đơn giản được phục vụ từ trang web của bạn
Không bao gồm giải pháp cho hình ảnh xác thực trong đánh dấu HTML: Tôi thực sự đã thấy một trang web có giải pháp cho hình ảnh xác thực trong chính trang đó , (mặc dù được ẩn khá tốt) do đó làm cho nó khá vô dụng. Đừng làm điều gì đó như thế này. Một lần nữa, hãy sử dụng một dịch vụ như reCaptcha và bạn sẽ không gặp phải vấn đề này (nếu bạn sử dụng đúng cách).
Captchas có thể được giải quyết đồng loạt: Có các dịch vụ giải hình ảnh xác thực trong đó con người thực tế, được trả lương thấp, con người giải quyết hàng loạt hình ảnh. Một lần nữa, sử dụng reCaptcha là một ý tưởng tốt ở đây, vì chúng có các biện pháp bảo vệ (chẳng hạn như thời gian tương đối ngắn mà người dùng có để giải captcha). Loại dịch vụ này khó có thể được sử dụng trừ khi dữ liệu của bạn thực sự có giá trị.
Phục vụ nội dung văn bản của bạn dưới dạng hình ảnh
Bạn có thể kết xuất văn bản vào phía máy chủ hình ảnh và phục vụ nó sẽ được hiển thị, điều này sẽ cản trở việc trích xuất văn bản đơn giản.
Tuy nhiên, điều này không tốt cho trình đọc màn hình, công cụ tìm kiếm, hiệu suất và khá nhiều thứ khác. Nó cũng bất hợp pháp ở một số nơi (do khả năng tiếp cận, ví dụ: Đạo luật về Người khuyết tật của Người Mỹ) và cũng dễ dàng lách luật với một số OCR, vì vậy đừng làm điều đó.
Bạn có thể làm một cái gì đó tương tự với các sprite CSS, nhưng điều đó cũng gặp phải vấn đề tương tự.
Đừng để lộ dữ liệu hoàn chỉnh của bạn:
Nếu khả thi, đừng cung cấp một cách để script / bot lấy tất cả dữ liệu của bạn. Ví dụ: Bạn có một trang web tin tức, với rất nhiều bài viết cá nhân. Bạn có thể làm cho những bài viết đó chỉ có thể truy cập bằng cách tìm kiếm chúng thông qua tìm kiếm trên trang web và, nếu bạn không có danh sách tất cả các bài viết trên trang web và URL của chúng ở bất cứ đâu, những bài viết đó sẽ chỉ có thể truy cập bằng cách sử dụng tìm kiếm đặc tính. Điều này có nghĩa là một tập lệnh muốn lấy tất cả các bài viết khỏi trang web của bạn sẽ phải thực hiện tìm kiếm tất cả các cụm từ có thể xuất hiện trong bài viết của bạn để tìm tất cả các bài viết, sẽ tốn thời gian, không hiệu quả khủng khiếp và hy vọng sẽ thực hiện người cạp bỏ cuộc.
Điều này sẽ không hiệu quả nếu:
- Bot / script không muốn / cần tập dữ liệu đầy đủ nào.
- Bài viết của bạn được phục vụ từ một URL trông giống như
example.com/article.php?articleId=12345
. Điều này (và những thứ tương tự) sẽ cho phép người dọn dẹp chỉ đơn giản lặp lại tất cả các articleId
s và yêu cầu tất cả các bài viết theo cách đó.
- Có nhiều cách khác để cuối cùng tìm thấy tất cả các bài viết, chẳng hạn như bằng cách viết một tập lệnh để theo các liên kết trong các bài viết dẫn đến các bài viết khác.
- Tìm kiếm một cái gì đó như "và" hoặc "the" có thể tiết lộ hầu hết mọi thứ, vì vậy đó là điều cần phải biết. (Bạn có thể tránh điều này bằng cách chỉ trả lại 10 hoặc 20 kết quả hàng đầu).
- Bạn cần các công cụ tìm kiếm để tìm nội dung của bạn.
Đừng để lộ API, điểm cuối và những thứ tương tự:
Hãy chắc chắn rằng bạn không để lộ bất kỳ API nào, thậm chí là vô ý. Ví dụ: nếu bạn đang sử dụng AJAX hoặc các yêu cầu mạng từ trong Adobe Flash hoặc Java Applet (God cấm!) Để tải dữ liệu của bạn, việc xem xét các yêu cầu mạng từ trang và tìm ra những yêu cầu đó sẽ đến đâu và sau đó đảo ngược kỹ sư và sử dụng các điểm cuối đó trong một chương trình cạp. Hãy chắc chắn rằng bạn làm xáo trộn các điểm cuối của bạn và làm cho chúng khó sử dụng, như được mô tả.
Để ngăn chặn trình phân tích cú pháp và trình dọn dẹp HTML:
Vì các trình phân tích cú pháp HTML hoạt động bằng cách trích xuất nội dung từ các trang dựa trên các mẫu có thể nhận dạng trong HTML, chúng tôi có thể cố ý thay đổi các mẫu đó trong oder để phá vỡ các bộ đệm này hoặc thậm chí bắt vít với chúng. Hầu hết các mẹo này cũng áp dụng cho những người dọn dẹp khác như nhện và màn hình.
Thường xuyên thay đổi HTML của bạn
Những kẻ lừa đảo xử lý HTML trực tiếp làm như vậy bằng cách trích xuất nội dung từ các phần cụ thể, có thể xác định được trên trang HTML của bạn. Ví dụ: Nếu tất cả các trang trên trang web của bạn có div
id article-content
, chứa văn bản của bài viết, thì việc viết một tập lệnh để truy cập tất cả các trang bài viết trên trang web của bạn và trích xuất văn bản nội dung của article-content
div trên mỗi trang bài viết và voilà, trình cạp có tất cả các bài viết từ trang web của bạn ở định dạng có thể được sử dụng lại ở nơi khác.
Nếu bạn thay đổi HTML và cấu trúc các trang của bạn thường xuyên, những người dọn dẹp như vậy sẽ không còn hoạt động.
Bạn có thể thường xuyên thay đổi id và các lớp phần tử trong HTML của mình, thậm chí có thể tự động. Vì vậy, nếu bạn div.article-content
trở thành một cái gì đó giống như div.a4c36dda13eaf0
, và thay đổi mỗi tuần, máy cạp sẽ hoạt động tốt ban đầu, nhưng sẽ bị hỏng sau một tuần. Đảm bảo thay đổi độ dài của id / class của bạn, nếu không, trình quét sẽ sử dụng div.[any-14-characters]
để tìm div mong muốn thay thế. Cẩn thận với các lỗ tương tự khác quá ..
Nếu không có cách nào để tìm nội dung mong muốn từ đánh dấu, trình quét sẽ làm như vậy từ cách cấu trúc HTML. Vì vậy, nếu tất cả các trang bài viết của bạn giống nhau ở chỗ mỗi div
bên trong div
sau một h1
nội dung bài viết, người dọn dẹp sẽ có được nội dung bài viết dựa trên đó. Một lần nữa, để phá vỡ điều này, bạn có thể thêm / xóa đánh dấu bổ sung vào HTML của mình, theo định kỳ và ngẫu nhiên, vd. thêm div
s hoặc span
s. Với xử lý HTML phía máy chủ hiện đại, điều này không quá khó.
Những điều cần lưu ý:
Nó sẽ tẻ nhạt và khó thực hiện, duy trì và gỡ lỗi.
Bạn sẽ cản trở bộ nhớ đệm. Đặc biệt nếu bạn thay đổi id hoặc các lớp của các thành phần HTML, điều này sẽ yêu cầu thay đổi tương ứng trong các tệp CSS và JavaScript của bạn, điều đó có nghĩa là mỗi khi bạn thay đổi chúng, chúng sẽ phải được trình duyệt tải xuống lại. Điều này sẽ dẫn đến thời gian tải trang lâu hơn cho khách truy cập lặp lại và tăng tải máy chủ. Nếu bạn chỉ thay đổi nó một lần một tuần, nó sẽ không phải là một vấn đề lớn.
Những người dọn dẹp thông minh vẫn sẽ có thể có được nội dung của bạn bằng cách suy ra nội dung thực sự ở đâu, vd. bằng cách biết rằng một khối lớn văn bản trên trang có khả năng là bài viết thực tế. Điều này cho phép vẫn có thể tìm và trích xuất dữ liệu mong muốn từ trang. Boilerpipe làm chính xác điều này.
Về cơ bản, đảm bảo rằng không dễ để tập lệnh tìm được nội dung thực tế, mong muốn cho mọi trang tương tự.
Xem thêm Cách ngăn trình thu thập thông tin tùy thuộc vào XPath lấy nội dung trang để biết chi tiết về cách thực hiện điều này trong PHP.
Thay đổi HTML của bạn dựa trên vị trí của người dùng
Đây là loại tương tự như các mẹo trước. Nếu bạn phục vụ HTML khác nhau dựa trên vị trí / quốc gia của người dùng (được xác định theo địa chỉ IP), điều này có thể phá vỡ các mẩu tin lưu niệm được gửi đến người dùng. Ví dụ: nếu ai đó đang viết một ứng dụng di động loại bỏ dữ liệu từ trang web của bạn, ban đầu nó sẽ hoạt động tốt, nhưng sẽ bị hỏng khi nó thực sự được phân phối cho người dùng, vì những người dùng đó có thể ở một quốc gia khác và do đó có HTML khác nhau, do đó cạp nhúng không được thiết kế để tiêu thụ.
Thường xuyên thay đổi HTML của bạn, chủ động bắt vít với những người dọn dẹp bằng cách làm như vậy!
Một ví dụ: Bạn có một tính năng tìm kiếm trên trang web của mình, được đặt tại example.com/search?query=somesearchquery
, trả về HTML sau:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
Như bạn có thể đoán điều này rất dễ để cạo: tất cả những gì một người quét cần làm là nhấn URL tìm kiếm bằng một truy vấn và trích xuất dữ liệu mong muốn từ HTML được trả về. Ngoài việc thay đổi định kỳ HTML như được mô tả ở trên, bạn cũng có thể để lại đánh dấu cũ với các id và lớp cũ, ẩn nó bằng CSS và điền nó với dữ liệu giả, do đó đầu độc trình quét. Đây là cách trang kết quả tìm kiếm có thể được thay đổi:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
Điều này có nghĩa là những người dọn dẹp được viết để trích xuất dữ liệu từ HTML dựa trên các lớp hoặc ID sẽ tiếp tục hoạt động, nhưng họ sẽ nhận được dữ liệu giả hoặc thậm chí quảng cáo, dữ liệu mà người dùng thực sẽ không bao giờ nhìn thấy, vì chúng bị ẩn bằng CSS.
Xoay bằng dụng cụ cạo: Chèn dữ liệu honeypot giả, vô hình vào trang của bạn
Thêm vào ví dụ trước, bạn có thể thêm các mục honeypot vô hình vào HTML của mình để bắt người dọn dẹp. Một ví dụ có thể được thêm vào trang kết quả tìm kiếm được mô tả trước đó:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
Một bộ cạp được viết để có được tất cả các kết quả tìm kiếm sẽ chọn cái này, giống như bất kỳ kết quả tìm kiếm thực sự nào khác trên trang và truy cập vào liên kết, tìm kiếm nội dung mong muốn. Một người thực sự thậm chí sẽ không bao giờ nhìn thấy nó ở nơi đầu tiên (do nó bị ẩn bằng CSS) và sẽ không truy cập vào liên kết. Một con nhện chính hãng và mong muốn như Google sẽ không truy cập vào liên kết vì bạn không được phép /scrapertrap/
trong tệp robots.txt của mình.
Bạn có thể thực scrapertrap.php
hiện một số thứ như chặn truy cập cho địa chỉ IP đã truy cập hoặc buộc captcha cho tất cả các yêu cầu tiếp theo từ IP đó.
Đừng quên không cho phép honeypot ( /scrapertrap/
) trong tệp robot.txt của bạn để các bot công cụ tìm kiếm không rơi vào đó.
Bạn có thể / nên kết hợp điều này với mẹo trước đây để thay đổi HTML của bạn thường xuyên.
Thay đổi điều này thường xuyên quá, vì cuối cùng những người dọn dẹp sẽ học cách tránh nó. Thay đổi URL honeypot và văn bản. Cũng muốn xem xét việc thay đổi CSS nội tuyến được sử dụng để ẩn và sử dụng thuộc tính ID và CSS bên ngoài, vì người dọn dẹp sẽ học cách tránh mọi thứ có style
thuộc tính với CSS được sử dụng để ẩn nội dung. Ngoài ra, hãy thử chỉ kích hoạt nó đôi khi, vì vậy bộ cạp hoạt động ban đầu, nhưng sau một thời gian nghỉ. Điều này cũng áp dụng cho các mẹo trước.
Những người độc hại có thể ngăn chặn quyền truy cập của người dùng thực bằng cách chia sẻ liên kết đến honeypot của bạn hoặc thậm chí nhúng liên kết đó ở đâu đó dưới dạng hình ảnh (ví dụ: trên một diễn đàn). Thay đổi URL thường xuyên và thực hiện bất kỳ thời gian cấm tương đối ngắn.
Phục vụ dữ liệu giả và vô dụng nếu bạn phát hiện một dụng cụ cạo
Nếu bạn phát hiện ra cái gì rõ ràng là một cái cạp, bạn có thể cung cấp dữ liệu giả và vô dụng; điều này sẽ làm hỏng dữ liệu mà trình cào được từ trang web của bạn. Bạn cũng nên làm cho không thể phân biệt dữ liệu giả như vậy với dữ liệu thực, để những người dọn dẹp không biết rằng họ đang bị lừa.
Ví dụ: bạn có một trang web tin tức; nếu bạn phát hiện một trình cào, thay vì chặn truy cập, hãy phân phát các bài báo giả mạo, được tạo ngẫu nhiên và điều này sẽ gây độc cho dữ liệu của trình cạp. Nếu bạn làm cho dữ liệu giả của mình không thể phân biệt được với thực tế, bạn sẽ khiến người dọn dẹp khó có được thứ họ muốn, cụ thể là dữ liệu thực, thực.
Không chấp nhận yêu cầu nếu Tác nhân người dùng trống / thiếu
Thông thường, những người dọn dẹp bằng văn bản lười biếng sẽ không gửi tiêu đề Tác nhân Người dùng với yêu cầu của họ, trong khi tất cả các trình duyệt cũng như trình thu thập công cụ tìm kiếm sẽ.
Nếu bạn nhận được yêu cầu không có tiêu đề Tác nhân người dùng, bạn có thể hiển thị hình ảnh xác thực hoặc chỉ cần chặn hoặc giới hạn quyền truy cập. (Hoặc phục vụ dữ liệu giả như được mô tả ở trên hoặc một cái gì đó khác ..)
Nó là tầm thường để giả mạo, nhưng như một biện pháp chống lại những người viết lách kém bằng văn bản, nó đáng để thực hiện.
Không chấp nhận các yêu cầu nếu Tác nhân người dùng là một công cụ quét phổ biến; danh sách đen được sử dụng bởi người dọn dẹp
Trong một số trường hợp, người dọn dẹp sẽ sử dụng Tác nhân người dùng mà không có trình duyệt hoặc trình duyệt công cụ tìm kiếm thực sự nào sử dụng, chẳng hạn như:
- "Mozilla" (Chỉ vậy thôi, không có gì khác. Tôi đã thấy một vài câu hỏi về việc cào ở đây, bằng cách đó. Một trình duyệt thực sự sẽ không bao giờ chỉ sử dụng điều đó)
- "Java 1.7.43_u43" (Theo mặc định, HTTPUrlConnection của Java sử dụng cái gì đó như thế này.)
- "BIZCO EasyScraping Studio 2.0"
- "Wget", "curl", "libcurl", .. (Wget và cURL đôi khi được sử dụng để cạo cơ bản)
Nếu bạn thấy rằng một chuỗi Tác nhân Người dùng cụ thể được sử dụng bởi những người dọn dẹp trên trang web của bạn và nó không được sử dụng bởi các trình duyệt thực hoặc trình thu hợp pháp, bạn cũng có thể thêm nó vào danh sách đen của mình.
Nếu nó không yêu cầu tài sản (CSS, hình ảnh), thì đó không phải là một trình duyệt thực sự.
Một trình duyệt thực sẽ (hầu như luôn luôn) yêu cầu và tải xuống các tài sản như hình ảnh và CSS. Trình phân tích cú pháp và trình dọn dẹp HTML sẽ không vì họ chỉ quan tâm đến các trang thực tế và nội dung của chúng.
Bạn có thể ghi nhật ký yêu cầu vào tài sản của mình và nếu bạn thấy nhiều yêu cầu chỉ dành cho HTML, thì đó có thể là một công cụ quét.
Coi chừng các bot công cụ tìm kiếm, thiết bị di động cổ, trình đọc màn hình và thiết bị được định cấu hình sai cũng có thể không yêu cầu tài sản.
Sử dụng và yêu cầu cookie; sử dụng chúng để theo dõi hành động của người dùng và cạp.
Bạn có thể yêu cầu bật cookie để xem trang web của mình. Điều này sẽ ngăn cản các nhà văn cào cào thiếu kinh nghiệm và người mới, tuy nhiên thật dễ dàng để một người cạo có thể gửi cookie. Nếu bạn sử dụng và yêu cầu chúng, bạn có thể theo dõi các hành động của người dùng và người quét với họ, và do đó thực hiện giới hạn tỷ lệ, chặn hoặc hiển thị hình ảnh xác thực trên mỗi người dùng thay vì trên cơ sở mỗi IP.
Ví dụ: khi người dùng thực hiện tìm kiếm, hãy đặt cookie xác định duy nhất. Khi các trang kết quả được xem, xác minh cookie đó. Nếu người dùng mở tất cả các kết quả tìm kiếm (bạn có thể biết từ cookie), thì đó có thể là một cái cạp.
Sử dụng cookie có thể không hiệu quả, vì người dọn dẹp cũng có thể gửi cookie với yêu cầu của họ và loại bỏ chúng khi cần thiết. Bạn cũng sẽ ngăn truy cập đối với người dùng thực sự đã tắt cookie, nếu trang web của bạn chỉ hoạt động với cookie.
Lưu ý rằng nếu bạn sử dụng JavaScript để đặt và truy xuất cookie, bạn sẽ chặn những người dọn dẹp không chạy JavaScript, vì họ không thể truy xuất và gửi cookie theo yêu cầu của họ.
Sử dụng JavaScript + Ajax để tải nội dung của bạn
Bạn có thể sử dụng JavaScript + AJAX để tải nội dung của mình sau khi trang tự tải. Điều này sẽ làm cho nội dung không thể truy cập được đối với các trình phân tích cú pháp HTML không chạy JavaScript. Đây thường là một công cụ răn đe hiệu quả đối với những người mới và những lập trình viên thiếu kinh nghiệm viết các mẩu tin lưu niệm.
Coi chừng:
Sử dụng JavaScript để tải nội dung thực tế sẽ làm giảm hiệu suất và trải nghiệm của người dùng
Các công cụ tìm kiếm cũng có thể không chạy JavaScript, do đó ngăn chúng lập chỉ mục nội dung của bạn. Điều này có thể không phải là một vấn đề cho các trang kết quả tìm kiếm, nhưng có thể cho những thứ khác, chẳng hạn như các trang bài viết.
Làm xáo trộn đánh dấu của bạn, yêu cầu mạng từ các tập lệnh và mọi thứ khác.
Nếu bạn sử dụng Ajax và JavaScript để tải dữ liệu của mình, hãy làm xáo trộn dữ liệu được truyền. Ví dụ, bạn có thể mã hóa dữ liệu của mình trên máy chủ (với thứ gì đó đơn giản như base64 hoặc phức tạp hơn), sau đó giải mã và hiển thị nó trên máy khách, sau khi tìm nạp qua Ajax. Điều này có nghĩa là ai đó đang kiểm tra lưu lượng mạng sẽ không thấy ngay trang của bạn hoạt động và tải dữ liệu như thế nào và sẽ khó khăn hơn khi ai đó yêu cầu trực tiếp yêu cầu dữ liệu từ các điểm cuối của bạn, vì họ sẽ phải thiết kế ngược thuật toán giải mã của bạn.
Nếu bạn sử dụng Ajax để tải dữ liệu, bạn sẽ khó sử dụng các điểm cuối mà không tải trang trước, ví dụ: bằng cách yêu cầu một số khóa phiên làm tham số, bạn có thể nhúng JavaScript hoặc HTML của mình.
Bạn cũng có thể nhúng dữ liệu bị xáo trộn của mình trực tiếp vào trang HTML ban đầu và sử dụng JavaScript để khử nhiễu và hiển thị nó, điều này sẽ tránh được các yêu cầu mạng bổ sung. Làm điều này sẽ khiến việc trích xuất dữ liệu trở nên khó khăn hơn đáng kể khi sử dụng trình phân tích cú pháp chỉ có HTML mà không chạy JavaScript, vì người viết trình quét sẽ phải đảo ngược JavaScript của bạn (bạn cũng nên làm xáo trộn).
Bạn có thể muốn thay đổi phương pháp che giấu thường xuyên, để phá vỡ những kẻ phá hoại đã tìm ra nó.
Có một số nhược điểm khi làm một cái gì đó như thế này, mặc dù:
Nó sẽ tẻ nhạt và khó thực hiện, duy trì và gỡ lỗi.
Nó sẽ không hiệu quả đối với người dọn dẹp và trình sàng lọc thực sự chạy JavaScript và sau đó trích xuất dữ liệu. (Hầu hết các trình phân tích cú pháp HTML đơn giản không chạy JavaScript)
Nó sẽ làm cho trang web của bạn không hoạt động đối với người dùng thực nếu họ bị tắt JavaScript.
Hiệu suất và thời gian tải trang sẽ bị ảnh hưởng.
Phi kỹ thuật:
Nói mọi người đừng cạo, và một số người sẽ tôn trọng nó
Tìm một luật sư
Cung cấp dữ liệu của bạn, cung cấp API:
Bạn có thể làm cho dữ liệu của bạn dễ dàng có sẵn và yêu cầu ghi công và liên kết trở lại trang web của bạn. Có lẽ tính phí $$$ cho nó.
Điều khoản khác:
Ngoài ra còn có các dịch vụ bảo vệ cạo thương mại, chẳng hạn như chống quét bởi Cloudflare hoặc Distill Networks (Chi tiết về cách thức hoạt động ở đây ), thực hiện những điều này và hơn thế nữa cho bạn.
Tìm sự cân bằng giữa khả năng sử dụng cho người dùng thực và khả năng chống cạp: Mọi thứ bạn làm sẽ tác động tiêu cực đến trải nghiệm người dùng theo cách này hay cách khác, tìm sự thỏa hiệp.
Đừng quên trang web và ứng dụng di động của bạn. Nếu bạn có một ứng dụng dành cho thiết bị di động, cũng có thể được kiểm tra màn hình và lưu lượng truy cập mạng có thể được kiểm tra để xác định các điểm cuối REST mà nó sử dụng.
Phế liệu có thể cạo các mẩu tin lưu niệm khác: Nếu có một trang web có nội dung được quét từ trang của bạn, các phần mềm khác có thể quét từ trang web của phần mềm đó.
Đọc thêm: