Làm cách nào để ngăn chặn trang web cào? [đóng cửa]


301

Tôi có một trang web âm nhạc khá lớn với cơ sở dữ liệu nghệ sĩ lớn. Tôi đã nhận thấy các trang web âm nhạc khác quét dữ liệu trang web của chúng tôi (Tôi nhập tên Nghệ sĩ giả ở đây và ở đó và sau đó tìm kiếm google cho họ).

Làm thế nào tôi có thể ngăn chặn cạo màn hình? Nó thậm chí có thể?


9
Bạn đã xem xét việc cố gắng phát hiện trình quét của họ thông qua IP hoặc tương tự (kiểm tra nhật ký của bạn) và chỉ giả mạo dữ liệu của bạn hoàn toàn cho những người đó? Bằng cách đó, vâng, họ sẽ "cạo" trang web của bạn, nhưng "dữ liệu" của họ sẽ vô dụng.
Lasse V. Karlsen

30
Lộn ngược lolcats và đảo ngược / xáo trộn văn bản bất cứ ai?
Wayne Werner



2
@JonasCz đó là trò đùa mỉa mai. Điều đáng buồn là đề xuất tương tự được bao gồm trong câu trả lời của bạn, mặc dù bị chỉ trích.
Tomáš Zato - Phục hồi Monica

Câu trả lời:


325

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 articleIds 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ó divid 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-contentdiv 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-contenttrở 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 divbên trong divsau một h1nộ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 divs hoặc spans. 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.phphiệ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ó stylethuộ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:


11
Điều này đã đưa tôi đến đây. Một câu trả lời khá ấn tượng. Ngoài ra, một lịch sử sửa đổi khá tuyệt vời. Cảm ơn vì bài đăng. Bạn nhận được một upvote. Không chỉ vì số lượng nỗ lực cho việc này, mà bởi vì nó hữu ích cho tôi.
DaveTheMinion 2/2/2016

1
Câu trả lời chính xác! Dưới đây là một vài suy nghĩ. A real browser will (almost always) request and download assets such as images and CSScũng đúng cho độc giả tiếp cận? CAPTCHA bị hỏng nên ít nhất các dịch vụ chuyên nghiệp có thể không bị cản trở bởi nó. Sử dụng cookie yêu cầu thông báo / đồng ý ở EU. Find a balance between usability for real users and scraper-proofnesscũng cân bằng thời gian lập trình / độ phức tạp so với lợi ích tài chính.
Eric J.

5
@JonH, Nếu họ quan tâm, họ sẽ đọc nó. Thêm vào đó, tôi đã chia nó thành các đoạn với các tiêu đề và các tiêu đề phụ, vì vậy mọi người có thể quét nó và đọc các phần họ muốn. Thực tế, có khá nhiều câu trả lời dài tương tự về SO trên thực tế và mọi người thường đọc chúng.
JonasCz - Tái lập Monica

2
@JoshCrozier - Tôi chỉ nghĩ rằng các trang web như thế này không chơi tốt với nhiều thông tin này. Tôi không nói rằng thông tin là xấu.
JonH

2
PS Dấu vân tay của ý tưởng nội dung của tôi có thể được sử dụng trong một tòa án của pháp luật. Hãy tưởng tượng cú sốc khi bạn chứng minh rằng người sở hữu dữ liệu của bạn đã nhận được dữ liệu từ bạn, thông qua các đặc điểm duy nhất trực tiếp trong dữ liệu ...
ErikE

241

Tôi sẽ cho rằng bạn đã thiết lập robots.txt.

Như những người khác đã đề cập, người dọn dẹp có thể giả mạo gần như mọi khía cạnh của hoạt động của họ, và có lẽ rất khó để xác định các yêu cầu đến từ những kẻ xấu.

Tôi sẽ cân nhắc:

  1. Thiết lập một trang , /jail.html.
  2. Không cho phép truy cập vào trang robots.txt(vì vậy những con nhện đáng kính sẽ không bao giờ truy cập).
  3. Đặt một liên kết trên một trong các trang của bạn, ẩn nó bằng CSS ( display: none).
  4. Ghi lại địa chỉ IP của khách truy cập /jail.html.

Điều này có thể giúp bạn nhanh chóng xác định các yêu cầu từ những người dọn dẹp đang coi thường bạn robots.txt.

Bạn cũng có thể muốn làm cho bạn /jail.htmlmột toàn bộ trang web toàn có giống nhau, đánh dấu chính xác như các trang bình thường, nhưng với giả dữ liệu ( /jail/album/63ajdka, /jail/track/3aads8, vv). Bằng cách này, những người dọn dẹp tồi sẽ không được cảnh báo về "đầu vào bất thường" cho đến khi bạn có cơ hội chặn chúng hoàn toàn.


48
Tôi đã thấy kỹ thuật này được gọi là "honeypot" trước đây. Đây là một kỹ thuật cũng được sử dụng trong lọc thư rác, nơi bạn đặt địa chỉ email trên một trang nhưng ẩn nó hoặc làm cho nó rõ ràng không phải để mọi người gửi thư hợp pháp đến. Sau đó thu thập địa chỉ IP của bất kỳ máy chủ thư nào chuyển thư đến địa chỉ đó.
thomasrutter

12
Điều này giả định rằng họ đang thu thập liên kết. Hầu hết các nhà phế liệu sẽ cố gắng gửi đến một hình thức của một số loại và cạo dữ liệu trả về.
Byron Whitlock

9
Tôi đã thấy các honeypot dựa trên Perl cho email có liên kết đến các "trang" khác được tạo bởi tập lệnh Perl. Các bot hợp pháp đọc robot.txt không nhìn vào nó và nó bị ẩn khỏi người dùng thông qua CSS, nhưng những người dọn rác (hoặc người thu thập email) nhanh chóng bị cuốn vào một cây trang vô cùng sâu, tất cả đều có dữ liệu xấu về chúng. Đặt một liên kết đến tập lệnh ngay khi bắt đầu mỗi trang của bạn.
Stephen P

18
Một điều tuyệt vời khác để ném vào honeypots là teergrubing (hoặc tarpits). Đây là một kỹ thuật cũ mà tôi yêu thích - khi bạn xác định được một kẻ xấu, bạn đưa quy trình spam / nạo của anh ta để thu thập thông tin bằng cách cố tình giữ các kết nối của anh ta mở miễn là có thể mà không cần thời gian ra ngoài. Tất nhiên, điều này có thể cảnh báo họ rằng bạn cũng đồng ý với họ, nhưng trời ơi thật vui. vi.wikipedia.org/wiki/Teergrubing
womp

11
Vấn đề duy nhất với phương pháp này là nếu tôi đặt [img] yoursite / jail.html [/ img] trên một diễn đàn phổ biến. Bạn sẽ nhận được hàng tấn IP đăng nhập vào hệ thống của bạn và thật khó để lọc cái nào là cái xấu. Nếu bạn muốn ngăn chặn điều này, bạn cần thêm mã thông báo được liên kết với IP trong URL. Một cái gì đó giống như jail.php? T = hoeyvm và trong cơ sở dữ liệu, bạn có một hiệp hội của hoeyvm và IP đã yêu cầu trang.
HoLyVieR

48

Kiện họ

Nghiêm túc: Nếu bạn có một số tiền, hãy nói chuyện với một luật sư trẻ, tốt bụng, biết cách đi vòng quanh Quốc tế. Bạn thực sự có thể làm một cái gì đó ở đây. Tùy thuộc vào vị trí của các trang web, bạn có thể nhờ luật sư viết ra lệnh ngừng và hủy bỏ hoặc tương đương tại quốc gia của bạn. Bạn có thể ít nhất có thể sợ những kẻ khốn.

Tài liệu chèn các giá trị giả của bạn. Chèn các giá trị giả rõ ràng (nhưng tối nghĩa) chỉ vào bạn. Tôi nghĩ rằng đây là thông lệ phổ biến với các công ty danh bạ điện thoại và tại Đức, tôi nghĩ đã có một vài trường hợp khi copycats bị đánh cắp thông qua các mục giả mạo mà họ đã sao chép 1: 1.

Nó sẽ là một sự xấu hổ nếu điều này sẽ đưa bạn vào rối tung lên mã HTML của bạn, kéo xuống SEO, hiệu lực và những thứ khác (mặc dù một hệ thống khuôn mẫu có sử dụng một cấu trúc HTML hơi khác nhau trên mỗi yêu cầu cho các trang giống hệt nhau đã có thể giúp một rất nhiều so với người dọn dẹp luôn dựa vào cấu trúc HTML và tên lớp / ID để lấy nội dung ra.)

Những trường hợp như thế này là những gì luật bản quyền tốt cho. Xé toạc công việc lương thiện của người khác để kiếm tiền là điều mà bạn nên có thể chống lại.


9
chỉ hoạt động ở các nước có khung pháp lý vững chắc.
TomL

3
Luật sư phát triển mạnh về xung đột - và thu lợi từ nó. Hiếm khi nào luật sư sẽ khuyên bạn không nên ra tòa. Bất cứ ai sẽ nói với bạn rằng thắng và thua không liên quan gì đến những khái niệm tốt đẹp về 'công lý' ngoại trừ những lý lẽ, tâm trạng và thành kiến ​​trong ngày. Hãy nhớ nếu nó sai, bạn có thể phải chịu trách nhiệm không chỉ đối với các chi phí của luật sư mà còn cho các bên khác và nếu họ quyết định phản tố - tốt. Bạn có thể dễ dàng mất nhà và bất kỳ tài sản nào khác trong cuộc sống của bạn. Không phải là một canh bạc tôi sẽ đề nghị. Tôi khuyên bạn nên tránh các tòa án bằng mọi giá.
Frankie

3
Tôi đồng ý với @TomL. Nếu họ ở phương Tây, điều đó có vẻ hợp lý. Nhưng nếu họ ở Ấn Độ / Trung Quốc / Nga / Ukraine / bất cứ điều gì - thì, nghiêm túc, tối thiểu đến không có cơ hội. Tôi có thể nói về các tòa án Nga: họ thậm chí sẽ không bận tâm làm việc với các yêu cầu của bạn.
Highstaker

35

Thực sự không có gì bạn có thể làm để ngăn chặn hoàn toàn điều này. Scrapers có thể giả mạo tác nhân người dùng của họ, sử dụng nhiều địa chỉ IP, v.v. và xuất hiện như một người dùng bình thường. Điều duy nhất bạn có thể làm là làm cho văn bản không có sẵn tại thời điểm trang được tải - làm cho nó bằng hình ảnh, flash hoặc tải nó bằng JavaScript. Tuy nhiên, hai ý tưởng đầu tiên là những ý tưởng tồi và ý tưởng cuối cùng sẽ là vấn đề về khả năng truy cập nếu JavaScript không được bật cho một số người dùng thông thường của bạn.

Nếu họ hoàn toàn đánh sập trang web của bạn và lướt qua tất cả các trang của bạn, bạn có thể thực hiện một số loại giới hạn tỷ lệ.

Có một số hy vọng mặc dù. Các mẩu tin lưu niệm dựa trên dữ liệu trang web của bạn ở định dạng nhất quán. Nếu bạn có thể ngẫu nhiên hóa nó bằng cách nào đó nó có thể phá vỡ cái cạp của họ. Những việc như thay đổi ID hoặc tên lớp của các thành phần trang trên mỗi lần tải, v.v. Nhưng đó là rất nhiều việc phải làm và tôi không chắc liệu nó có đáng không. Và thậm chí sau đó, họ có thể có được xung quanh nó với sự cống hiến đủ.


14
Tạo một hệ thống giới hạn số lượng trang mà một IP có thể xem mỗi phút là một cách tốt, vì những kẻ phá hoại màn hình sẽ lướt qua trang web nhanh hơn nhiều so với bất kỳ người bình thường nào.
TravisO

Đã đồng ý. IP tốn tiền và bị giới hạn bởi hầu hết các công ty lưu trữ.
Tal Weiss

re: "Những thứ như thay đổi ID hoặc tên lớp của các thành phần trang trên mỗi lần tải, v.v." Điều đó không tệ lắm nếu bạn tạo một tên lớp thông qua PHP và sau đó chỉ cần sử dụng <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Bạn thậm chí có thể sử dụng các chuỗi ngẫu nhiên trong đó để làm cho nó hoàn toàn độc đáo. Bất cứ điều gì ngăn họ tìm các mẫu làm cho việc phân tích ra khỏi DOM khó hơn rất nhiều.
cười khúc khích ngày

Không khó để tìm IP. Có rất nhiều proxy, máy tính bạn bè, máy tính làm việc, máy tính trường học, máy tính thư viện ...
Ẩn danh

@ user257493: Đúng, nhưng chúng tôi đang nói về ai đó đang cạo dữ liệu ở đây. Rất có thể là họ sẽ không đi đến đó nỗ lực nhiều chỉ để dữ liệu thu hoạch. Và nếu họ làm như vậy, cuối cùng bạn sẽ làm cạn kiệt nguồn cung cấp IP của họ.
ryeguy

31

Cung cấp API XML để truy cập dữ liệu của bạn; theo cách đơn giản để sử dụng. Nếu mọi người muốn dữ liệu của bạn, họ sẽ lấy nó, bạn cũng có thể đi ra ngoài.

Bằng cách này, bạn có thể cung cấp một tập hợp con chức năng một cách hiệu quả, đảm bảo rằng, ít nhất, những người dọn dẹp sẽ không thu thập các yêu cầu HTTP và lượng băng thông lớn.

Sau đó, tất cả những gì bạn phải làm là thuyết phục những người muốn dữ liệu của bạn sử dụng API. ;)


3
Điều này có vẻ rất hợp lý. Quét màn hình rất khó ngăn chặn và nếu bạn cung cấp API, bạn có thể đặt một số hạn chế cho nó, thêm thông báo ("Nội dung từ ----.com") và về cơ bản kiểm soát dữ liệu nào được cung cấp.
alecwh

6
@alecwh: và tính phí truy cập!
André Caron

3
Tôi đã trao cho bạn tiền thưởng, một phần vì web sẽ tốt hơn rất nhiều nếu mọi trang web làm điều này. Hãy hy vọng nó trở nên phổ biến hơn.
JonasCz - Tái lập Monica

1
Ngay sau khi bạn bắt họ đăng ký dịch vụ, họ sẽ quay lại trang web bình thường
mplungjan

Tôi là một người như vậy ở phía đối diện của cuộc trò chuyện này. Tôi xây dựng các mô hình cho các buổi trình diễn ở Broadway và phải cạo tất cả dữ liệu của mình thay vì truy cập gọn gàng.
Yaakov Bressler

22

Xin lỗi, thật khó để làm điều này ...

Tôi sẽ đề nghị bạn lịch sự yêu cầu họ không sử dụng nội dung của bạn (nếu nội dung của bạn có bản quyền).

Nếu đúng như vậy và họ không gỡ nó xuống, thì bạn có thể thực hiện hành động xa hơn và gửi cho họ một lá thư chấm dứt và thôi miên .

Nói chung, bất cứ điều gì bạn làm để ngăn chặn việc cạo có thể sẽ dẫn đến một hiệu ứng tiêu cực hơn, ví dụ như khả năng truy cập, bot / nhện, v.v.


12

Được rồi, như tất cả các bài viết nói, nếu bạn muốn làm cho nó thân thiện với công cụ tìm kiếm thì bot có thể cạo cho chắc chắn.

Nhưng bạn vẫn có thể làm một vài điều, và nó có thể gây ảnh hưởng đối với các bot cạo 60-70%.

Tạo một kịch bản kiểm tra như dưới đây.

Nếu một địa chỉ IP cụ thể đang truy cập rất nhanh thì sau một vài lần truy cập (5-10), hãy đặt địa chỉ IP + thông tin trình duyệt của nó vào một tệp hoặc cơ sở dữ liệu.

Bước tiếp theo

(Đây sẽ là một quá trình nền và chạy mọi lúc hoặc được lên lịch sau vài phút.) Tạo một tập lệnh khác sẽ tiếp tục kiểm tra các địa chỉ IP đáng ngờ đó.

Trường hợp 1. Nếu Tác nhân người dùng là của một công cụ tìm kiếm đã biết như Google, Bing , Yahoo (bạn có thể tìm thêm thông tin về các tác nhân người dùng bằng cách googling nó). Sau đó, bạn phải xem http://www.iplists.com/ . Danh sách này và cố gắng để phù hợp với mô hình. Và nếu nó có vẻ giống như một tác nhân người dùng giả mạo thì hãy yêu cầu điền CAPTCHA vào lần truy cập tiếp theo. (Bạn cần nghiên cứu thêm một chút về địa chỉ IP của bot. Tôi biết điều này có thể đạt được và cũng có thể thử whois của địa chỉ IP. Nó có thể hữu ích.)

Trường hợp 2. Không có tác nhân người dùng của bot tìm kiếm: Đơn giản chỉ cần yêu cầu điền CAPTCHA vào lần truy cập tiếp theo.


+1 Sử dụng iplists.com là một ý tưởng tuyệt vời
Daniel Trebbien

10

Câu trả lời muộn - và câu trả lời này có lẽ không phải là câu bạn muốn nghe ...

Chính tôi đã viết rất nhiều (hàng chục) công cụ khai thác dữ liệu chuyên ngành khác nhau . (chỉ vì tôi thích triết lý "dữ liệu mở").

Ở đây đã có nhiều lời khuyên trong các câu trả lời khác - bây giờ tôi sẽ đóng vai trò bênh vực của quỷ và sẽ mở rộng và / hoặc sửa chữa hiệu quả của chúng.

Đầu tiên:

  • nếu ai đó thực sự muốn dữ liệu của bạn
  • bạn không thể che giấu dữ liệu của mình một cách hiệu quả
  • nếu dữ liệu phải được truy cập công khai cho "người dùng thông thường" của bạn

Cố gắng sử dụng một số rào cản kỹ thuật không có giá trị rắc rối, gây ra:

  • cho người dùng thường xuyên của bạn bằng cách làm xấu đi trải nghiệm người dùng của họ
  • để bot thường xuyên và hoan nghênh (công cụ tìm kiếm)
  • Vân vân...

Plain HMTL - cách dễ nhất là phân tích các trang HTML đơn giản, với các lớp css và cấu trúc được xác định rõ. Ví dụ, nó là đủ để kiểm tra phần tử với Fireorms và sử dụng đúng đường dẫn Xpath và / hoặc CSS trong trình quét của tôi.

Bạn có thể tạo cấu trúc HTML một cách linh hoạt và đồng thời, bạn có thể tạo động các tên lớp CSS (và cả CSS nữa) (ví dụ: bằng cách sử dụng một số tên lớp ngẫu nhiên) - nhưng

  • bạn muốn trình bày thông tin cho người dùng thường xuyên của bạn một cách nhất quán
  • ví dụ: một lần nữa - đủ để phân tích cấu trúc trang một lần nữa để thiết lập trình cạp.
  • và nó có thể được thực hiện tự động bằng cách phân tích một số "nội dung đã biết"
    • một khi ai đó đã biết (bằng cách cạo trước đó), vd:
    • những gì chứa thông tin về "phil collins"
    • đủ hiển thị trang "phil collins" và (tự động) phân tích cách trang được cấu trúc "hôm nay" :)

Bạn không thể thay đổi cấu trúc cho mọi phản hồi, bởi vì người dùng thường xuyên sẽ ghét bạn. Ngoài ra, điều này sẽ gây ra nhiều rắc rối hơn cho bạn (bảo trì) không phải cho máy cạp. Đường dẫn XPath hoặc CSS có thể được xác định bởi tập lệnh cạo tự động từ nội dung đã biết.

Ajax - khó hơn một chút khi bắt đầu, nhưng nhiều lần đẩy nhanh quá trình cạo :) - tại sao?

Khi phân tích các yêu cầu và phản hồi, tôi chỉ cần thiết lập máy chủ proxy của riêng mình (được viết bằng perl) và firefox của tôi đang sử dụng nó. Tất nhiên, vì đó là proxy của riêng tôi - nó hoàn toàn bị ẩn - máy chủ mục tiêu xem nó như một trình duyệt thông thường. (Vì vậy, không có X-Forwarded-for và các tiêu đề như vậy). Dựa trên nhật ký proxy, hầu hết có thể xác định "logic" của các yêu cầu ajax, ví dụ: tôi có thể bỏ qua hầu hết các đoạn mã html và chỉ sử dụng các phản hồi ajax có cấu trúc tốt (chủ yếu ở định dạng JSON).

Vì vậy, ajax không giúp được gì nhiều ...

Một số phức tạp hơn là các trang sử dụng nhiều chức năng javascript được đóng gói .

Ở đây có thể sử dụng hai phương pháp cơ bản:

  • giải nén và hiểu về JS và tạo một trình quét theo logic Javascript (một cách khó khăn)
  • hoặc (tốt nhất là sử dụng một mình) - chỉ sử dụng Mozilla với Mozrepl để cạo. Ví dụ, việc cạo thực sự được thực hiện trong trình duyệt hỗ trợ javascript đầy đủ tính năng, được lập trình để nhấp vào đúng các yếu tố và chỉ cần lấy các phản hồi "được giải mã" trực tiếp từ cửa sổ trình duyệt.

Việc cạo như vậy là chậm (việc cạo được thực hiện như trong trình duyệt thông thường), nhưng nó là

  • Rất dễ dàng để thiết lập và sử dụng
  • và gần như không thể chống lại nó :)
  • và "sự chậm chạp" dù sao cũng cần thiết để chống lại "chặn các yêu cầu dựa trên IP nhanh chóng"

Lọc dựa trên Tác nhân Người dùng hoàn toàn không giúp ích gì. Bất kỳ công cụ khai thác dữ liệu nghiêm trọng nào cũng sẽ đặt nó thành một số chính xác trong bộ cạp của anh ta.

Yêu cầu Đăng nhập - không giúp được gì. Cách đơn giản nhất để đánh bại nó (không có bất kỳ phân tích và / hoặc kịch bản giao thức đăng nhập nào) chỉ là đăng nhập vào trang web như người dùng thông thường, sử dụng Mozilla và sau khi chỉ chạy trình quét dựa trên Mozrepl ...

Hãy nhớ rằng, yêu cầu đăng nhập giúp cho các bot ẩn danh, nhưng không giúp chống lại ai đó muốn cạo dữ liệu của bạn. Anh ta chỉ cần đăng ký chính mình vào trang web của bạn như người dùng thông thường.

Sử dụng khung cũng không hiệu quả lắm. Điều này được sử dụng bởi nhiều dịch vụ phim trực tiếp và nó không khó để đánh bại. Các khung chỉ đơn giản là một trang HTML / Javascript khác cần phân tích ... Nếu dữ liệu có giá trị rắc rối - công cụ khai thác dữ liệu sẽ thực hiện phân tích theo yêu cầu.

Giới hạn dựa trên IP hoàn toàn không hiệu quả - ở đây có quá nhiều máy chủ proxy công cộng và đây cũng là ĐKTC ... :) Nó không làm chậm việc cạo (đối với người thực sự muốn dữ liệu của bạn).

Rất khó là dữ liệu cạo trong hình ảnh. (ví dụ: chỉ đơn giản là chuyển đổi dữ liệu thành phía máy chủ hình ảnh). Sử dụng "tesseract" (OCR) giúp nhiều lần - nhưng thành thật mà nói - dữ liệu phải có giá trị cho những rắc rối cho người cạo. (mà nhiều lần không có giá trị).

Mặt khác, người dùng của bạn sẽ ghét bạn vì điều này. Bản thân tôi, (ngay cả khi không quét) ghét các trang web không cho phép sao chép nội dung trang vào bảng tạm (vì thông tin có trong hình ảnh hoặc (những thứ ngớ ngẩn) đang cố liên kết với nhấp chuột phải vào một số sự kiện Javascript tùy chỉnh. )

Khó nhất là các trang web sử dụng các applet java hoặc flash và applet sử dụng các yêu cầu https an toàn trong chính nó . Nhưng hãy suy nghĩ kỹ - người dùng iPhone của bạn sẽ hạnh phúc như thế nào ...;). Do đó, hiện tại rất ít trang web sử dụng chúng. Chính tôi, chặn tất cả nội dung flash trong trình duyệt của tôi (trong các phiên duyệt thông thường) - và không bao giờ sử dụng các trang web phụ thuộc vào Flash.

Các cột mốc của bạn có thể là ..., vì vậy bạn có thể thử phương pháp này - chỉ cần nhớ - bạn có thể sẽ mất một số người dùng của mình. Cũng cần nhớ rằng, một số tệp SWF có thể dịch ngược. ;)

Captcha (những thứ tốt - như reCaptcha) giúp ích rất nhiều - nhưng người dùng của bạn sẽ ghét bạn ... - hãy tưởng tượng, người dùng của bạn sẽ yêu bạn như thế nào khi họ cần giải một số captcha trong tất cả các trang hiển thị thông tin về các nghệ sĩ âm nhạc.

Có lẽ không cần phải tiếp tục - bạn đã tham gia vào bức tranh.

Bây giờ bạn nên làm gì:

Hãy nhớ rằng: Gần như không thể ẩn dữ liệu của bạn, nếu bạn ở phía bên kia muốn xuất bản chúng (theo cách thân thiện) cho người dùng thông thường của bạn.

Vì thế,

  • làm cho dữ liệu của bạn dễ dàng truy cập - bằng một số API
    • điều này cho phép truy cập dữ liệu dễ dàng
    • ví dụ: giảm tải máy chủ của bạn khỏi cào - tốt cho bạn
  • thiết lập quyền sử dụng đúng (ví dụ: phải trích dẫn nguồn)
  • hãy nhớ rằng, nhiều dữ liệu không có bản quyền - và khó bảo vệ chúng
  • thêm một số dữ liệu giả mạo (như bạn đã làm) và sử dụng các công cụ pháp lý
    • như những người khác đã nói, hãy gửi một "lá thư chấm dứt và thôi miên"
    • các hành động pháp lý khác (kiện và thích) có lẽ quá tốn kém và khó giành chiến thắng (đặc biệt là đối với các trang web không thuộc Hoa Kỳ)

Hãy suy nghĩ hai lần trước khi bạn sẽ cố gắng sử dụng một số rào cản kỹ thuật.

Thay vì cố gắng chặn các công cụ khai thác dữ liệu, chỉ cần thêm nhiều nỗ lực hơn vào khả năng sử dụng trang web của bạn. Người dùng của bạn sẽ yêu bạn. Thời gian (& năng lượng) được đầu tư vào các rào cản kỹ thuật thường không có giá trị - tốt hơn là dành thời gian để làm cho trang web thậm chí còn tốt hơn ...

Ngoài ra, kẻ trộm dữ liệu không giống như kẻ trộm bình thường.

Nếu bạn mua một thiết bị báo động nhà rẻ tiền và thêm một cảnh báo "ngôi nhà này được kết nối với cảnh sát" - nhiều tên trộm thậm chí sẽ không cố gắng đột nhập. Bởi vì một bước đi sai lầm của anh ta - và anh ta sẽ vào tù ...

Vì vậy, bạn đầu tư chỉ vài đô, nhưng kẻ trộm đầu tư và mạo hiểm nhiều.

Nhưng kẻ trộm dữ liệu không có rủi ro như vậy. ngược lại - nếu bạn thực hiện một động thái sai (ví dụ: nếu bạn giới thiệu một số BUG do các rào cản kỹ thuật), bạn sẽ mất người dùng của mình. Nếu lần đầu tiên bot không hoạt động, sẽ không có gì xảy ra - người khai thác dữ liệu sẽ thử một cách tiếp cận khác và / hoặc sẽ gỡ lỗi tập lệnh.

Trong trường hợp này, bạn cần đầu tư nhiều hơn nữa - và người đầu tư ít hơn nhiều.

Chỉ cần nghĩ rằng bạn muốn đầu tư thời gian và sức lực của mình ...

Ps: tiếng anh không phải là tiếng mẹ đẻ của tôi - vì vậy hãy tha thứ cho tiếng anh bị hỏng của tôi ...


@Parapluie Bạn thực sự nên đọc về Nội dung miễn phí và / hoặc về mô hình Nguồn mở - về ngày tháng, đó là lịch sử, mục tiêu và đạo đức. Và đặc biệt là về Dữ liệu mở - mà tôi đã tạo ra hầu hết những người
dọn dẹp

Tôi hiểu khái niệm này, mặc dù tôi cảm ơn bạn về những khuyến nghị uyên bác của bạn. Chúng tôi có thể đã có một cuộc trò chuyện thú vị về điều đó; nhưng có vẻ như bình luận ban đầu của tôi đã bị xóa bởi một bên thứ ba. Và như vậy, chúng ta có thực sự miễn phí không?
Parapluie

8

Từ góc độ công nghệ: Chỉ cần mô hình hóa những gì Google làm khi bạn truy cập chúng với quá nhiều truy vấn cùng một lúc. Điều đó nên dừng lại rất nhiều của nó.

Từ góc độ pháp lý: Có vẻ như dữ liệu bạn xuất bản không phải là độc quyền. Có nghĩa là bạn đang xuất bản tên và số liệu thống kê và thông tin khác không thể có bản quyền.

Nếu đây là trường hợp, người dọn dẹp không vi phạm bản quyền bằng cách phân phối lại thông tin của bạn về tên nghệ sĩ, v.v. Tuy nhiên, họ có thể vi phạm bản quyền khi họ tải trang web của bạn vào bộ nhớ vì trang web của bạn chứa các yếu tố có bản quyền (như bố cục, v.v.).

Tôi khuyên bạn nên đọc về Facebook v. Power.com và xem các đối số mà Facebook đã sử dụng để ngăn chặn việc quét màn hình. Có nhiều cách hợp pháp bạn có thể tìm cách ngăn chặn ai đó truy cập trang web của bạn. Họ có thể vươn xa và giàu trí tưởng tượng. Đôi khi các tòa án mua các lý lẽ. Đôi khi họ không.

Nhưng, giả sử bạn đang xuất bản thông tin trong phạm vi công cộng không có bản quyền như tên và số liệu thống kê cơ bản ... bạn chỉ nên để nó ở tên của bài phát biểu miễn phí và dữ liệu mở. Đó là, tất cả những gì về web.


1
Mặc dù bạn có thể không có bản quyền thông tin, bạn chắc chắn có thể đưa ra một điều khoản chống lại các điều khoản sử dụng. Sau đó, gửi thư chấm dứt và ngừng hoạt động vì vi phạm các điều khoản sử dụng.
André Caron

1
Nói chuyện miễn phí và dữ liệu mở thực sự là tinh thần của Internet!
Ciara

Vâng, bài phát biểu miễn phí và tất cả điều đó. Tuy nhiên, những người dọn dẹp có thể đang lãng phí một lượng đáng kể ngân sách hoặc băng thông của OP cũng như sao chép dữ liệu không thể kiểm soát được.
jpaugh

8

Những thứ có thể hoạt động chống lại người mới bắt đầu

  • Chặn IP
  • sử dụng nhiều ajax
  • kiểm tra tiêu đề yêu cầu người giới thiệu
  • yêu cầu đăng nhập

Những điều sẽ giúp nói chung:

  • thay đổi bố cục của bạn mỗi tuần
  • robot.txt

Những điều sẽ giúp nhưng sẽ khiến người dùng ghét bạn:

  • mã ngẫu nhiên

8

Tôi đã thực hiện rất nhiều thao tác quét web và tóm tắt một số kỹ thuật để ngăn chặn những kẻ phá hoại web trên blog của tôi dựa trên những gì tôi thấy khó chịu.

Đó là một sự đánh đổi giữa người dùng và người dọn dẹp của bạn. Nếu bạn giới hạn IP, hãy sử dụng CAPTCHA, yêu cầu đăng nhập, v.v., bạn sẽ gặp khó khăn cho những người dọn dẹp. Nhưng điều này cũng có thể làm mất đi người dùng chính hãng của bạn.


8

Thật không may, tùy chọn tốt nhất của bạn khá là thủ công: Hãy tìm các mẫu lưu lượng truy cập mà bạn cho là có dấu hiệu cào và cấm địa chỉ IP của chúng.

Vì bạn đang nói về một trang web công cộng, sau đó làm cho công cụ tìm kiếm thân thiện với trang web cũng sẽ làm cho trang web trở nên thân thiện. Nếu một công cụ tìm kiếm có thể thu thập dữ liệu và quét trang web của bạn thì một trình quét độc hại cũng có thể. Đó là một đường tốt để đi bộ.


4
Chặn IP sẽ làm chậm một bộ cạp nhưng nó cũng là công việc rất nhiều cho máy chủ của bạn. Giả sử tôi quét cho bạn 1000 proxy, tôi vẫn nhận được dữ liệu tôi muốn và bây giờ tường lửa của bạn là một mớ hỗn độn.
pguardiario

1
Khi bạn làm điều đó, họ sẽ đi ngang qua bạn. 100000 địa chỉ hôm nay không mất gì cho họ nhưng làm chậm trang web của bạn nếu bạn cố gắng cấm tất cả - và họ sẽ xoay IP để không truy cập nhiều hơn một hoặc hai lần
mplungjan

6

Chắc chắn nó có thể. Để thành công 100%, hãy đưa trang web của bạn ngoại tuyến.

Trong thực tế, bạn có thể làm một số điều khiến việc cạo trở nên khó khăn hơn một chút. Google kiểm tra trình duyệt để đảm bảo bạn không phải là robot quét kết quả tìm kiếm (mặc dù điều này, giống như hầu hết mọi thứ khác, có thể bị giả mạo).

Bạn có thể làm những việc như yêu cầu vài giây giữa kết nối đầu tiên đến trang web của bạn và các lần nhấp tiếp theo. Tôi không chắc thời gian lý tưởng sẽ là gì hoặc chính xác làm thế nào để làm điều đó, nhưng đó là một ý tưởng khác.

Tôi chắc chắn có một số người khác có nhiều kinh nghiệm hơn, nhưng tôi hy vọng những ý tưởng đó ít nhất là hữu ích.


6

Có một vài điều bạn có thể làm để thử và ngăn ngừa cào màn hình. Một số không hiệu quả lắm, trong khi một số khác (CAPTCHA), nhưng cản trở khả năng sử dụng. Bạn cũng phải lưu ý rằng nó có thể cản trở những người dọn dẹp trang web hợp pháp, chẳng hạn như các chỉ mục của công cụ tìm kiếm.

Tuy nhiên, tôi cho rằng nếu bạn không muốn nó bị loại bỏ, điều đó có nghĩa là bạn cũng không muốn các công cụ tìm kiếm lập chỉ mục.

Dưới đây là một số điều bạn có thể thử:

  • Hiển thị văn bản trong một hình ảnh. Điều này khá đáng tin cậy và ít gây đau khổ cho người dùng hơn CAPTCHA, nhưng có nghĩa là họ sẽ không thể cắt và dán và nó sẽ không mở rộng quy mô hoặc có thể truy cập được.
  • Sử dụng CAPTCHA và yêu cầu hoàn thành trước khi trả lại trang. Đây là một phương pháp đáng tin cậy, nhưng cũng là nỗi đau lớn nhất đối với người dùng.
  • Yêu cầu người dùng đăng ký tài khoản trước khi xem các trang và xác nhận địa chỉ email của họ. Điều này sẽ khá hiệu quả, nhưng không hoàn toàn - một người quét màn hình có thể thiết lập một tài khoản và có thể lập trình khéo léo kịch bản của họ để đăng nhập cho họ.
  • Nếu chuỗi tác nhân người dùng của khách hàng trống, hãy chặn truy cập. Một tập lệnh quét trang web thường sẽ được lập trình một cách lười biếng và sẽ không thiết lập một chuỗi tác nhân người dùng, trong khi tất cả các trình duyệt web sẽ.
  • Bạn có thể thiết lập một danh sách đen các chuỗi tác nhân người dùng quét màn hình đã biết khi bạn khám phá chúng. Một lần nữa, điều này sẽ chỉ giúp những người lười biếng mã hóa; một lập trình viên biết mình đang làm gì có thể đặt chuỗi tác nhân người dùng để mạo danh trình duyệt web.
  • Thay đổi đường dẫn URL thường xuyên. Khi bạn thay đổi nó, hãy đảm bảo rằng cái cũ vẫn hoạt động, nhưng chỉ chừng nào một người dùng có thể mở trình duyệt của họ. Làm cho khó dự đoán đường dẫn URL mới sẽ là gì. Điều này sẽ gây khó khăn cho các tập lệnh lấy nó nếu URL của chúng được mã hóa cứng. Tốt nhất nên làm điều này với một số loại kịch bản.

Nếu tôi phải làm điều này, có lẽ tôi sẽ sử dụng kết hợp cả ba, vì chúng giảm thiểu sự bất tiện cho người dùng hợp pháp. Tuy nhiên, bạn phải chấp nhận rằng bạn sẽ không thể chặn tất cả mọi người theo cách này và một khi ai đó tìm ra cách khắc phục nó, họ sẽ có thể cạo nó mãi mãi. Sau đó, bạn có thể cố gắng chặn địa chỉ IP của họ khi bạn phát hiện ra chúng tôi đoán.


6
  1. Không, không thể dừng lại (bằng mọi cách)
  2. Nắm lấy nó. Tại sao không xuất bản dưới dạng RDFa và trở thành siêu công cụ tìm kiếm thân thiện và khuyến khích sử dụng lại dữ liệu? Mọi người sẽ cảm ơn bạn và cung cấp tín dụng khi đến hạn (xem nhạcbrainz làm ví dụ).

Đó không phải là câu trả lời bạn có thể muốn, nhưng tại sao lại che giấu những gì bạn đang cố gắng công khai?


5

Phương pháp Một (Chỉ các trang web nhỏ):
Phục vụ dữ liệu được mã hóa / mã hóa.
Tôi Scape web bằng python (urllib, request, beautifulSoup, v.v.) và tìm thấy nhiều trang web phục vụ dữ liệu được mã hóa / mã hóa không thể giải mã bằng bất kỳ ngôn ngữ lập trình nào chỉ vì phương thức mã hóa không tồn tại.

Tôi đã đạt được điều này trong một trang web PHP bằng cách mã hóa và giảm thiểu đầu ra (CẢNH BÁO: đây không phải là ý tưởng hay cho các trang web lớn), phản hồi luôn bị xáo trộn nội dung.

Ví dụ về giảm thiểu đầu ra trong PHP ( Cách giảm thiểu đầu ra html của trang php? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

Phương pháp hai:
Nếu bạn không thể ngăn họ vặn chúng để phục vụ dữ liệu giả / vô dụng làm phản hồi.

Phương pháp thứ ba:
chặn các tác nhân người dùng cào phổ biến, bạn sẽ thấy điều này trong các trang web lớn / lớn vì không thể cạo chúng bằng "python3.4" khi bạn là Tác nhân người dùng.

Phương pháp thứ tư:
Đảm bảo tất cả các tiêu đề người dùng là hợp lệ, đôi khi tôi cung cấp càng nhiều tiêu đề càng tốt để làm cho trình quét của tôi trông giống như một người dùng xác thực, một số trong số chúng thậm chí không đúng hoặc hợp lệ như en-FU :).
Dưới đây là danh sách một số tiêu đề tôi thường cung cấp.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}

2

Thay vì đưa vào danh sách đen các bot, có lẽ bạn nên đưa chúng vào danh sách trắng. Nếu bạn không muốn giết kết quả tìm kiếm của mình cho một vài công cụ hàng đầu, bạn có thể liệt kê danh sách các chuỗi tác nhân người dùng của chúng, thường được công bố rộng rãi. Các bot kém đạo đức có xu hướng giả mạo các chuỗi tác nhân người dùng của các trình duyệt web phổ biến. Một vài công cụ tìm kiếm hàng đầu sẽ tăng 95% lưu lượng truy cập của bạn.

Việc xác định các bot nên khá đơn giản, sử dụng các kỹ thuật mà các áp phích khác đã đề xuất.


2

Cách tiếp cận nhanh chóng này sẽ là đặt bẫy booby / bot.

  1. Tạo một trang mà nếu nó đã mở một số lần nhất định hoặc thậm chí mở ra, sẽ thu thập một số thông tin nhất định như IP và không có gì (bạn cũng có thể xem xét các bất thường hoặc mẫu nhưng hoàn toàn không nên mở trang này).

  2. Tạo một liên kết đến điều này trong trang của bạn được ẩn bằng màn hình CSS: none; hoặc trái: -9999px; positon: tuyệt đối; cố gắng đặt nó ở những nơi ít có khả năng bị bỏ qua như nơi nội dung của bạn nằm dưới và không phải chân trang của bạn vì đôi khi các bot có thể chọn quên một số phần nhất định của trang.

  3. Trong tệp robot.txt của bạn, đặt toàn bộ quy tắc không cho phép vào các trang mà bạn không muốn các bot thân thiện (LOL, giống như chúng có khuôn mặt hạnh phúc!) Để thu thập thông tin và đặt trang này làm một trong số chúng.

  4. Bây giờ, nếu một bot thân thiện đi qua nó nên bỏ qua trang đó. Phải nhưng điều đó vẫn chưa đủ tốt. Tạo thêm một vài trong số các trang này hoặc bằng cách nào đó định tuyến lại một trang để chấp nhận các tên khác nhau. và sau đó đặt thêm các quy tắc không cho phép vào các trang bẫy này trong tệp robot.txt của bạn bên cạnh các trang bạn muốn bỏ qua.

  5. Thu thập IP của các bot này hoặc bất kỳ ai xâm nhập vào các trang này, không cấm chúng nhưng tạo một chức năng để hiển thị văn bản bị lỗi trong nội dung của bạn như số ngẫu nhiên, thông báo bản quyền, chuỗi văn bản cụ thể, hiển thị hình ảnh đáng sợ, về cơ bản là bất cứ điều gì cản trở bạn nội dung tốt. Bạn cũng có thể đặt các liên kết trỏ đến một trang sẽ tải mãi mãi. trong php bạn có thể sử dụng hàm ngủ (). Điều này sẽ chống lại trình thu thập thông tin nếu nó có một số loại phát hiện để bỏ qua các trang mất quá nhiều thời gian để tải vì một số bot được viết tốt được đặt để xử lý số lượng liên kết X tại một thời điểm.

  6. Nếu bạn đã tạo các chuỗi văn bản / câu cụ thể tại sao không vào công cụ tìm kiếm yêu thích của bạn và tìm kiếm chúng, nó có thể cho bạn biết nơi nội dung của bạn kết thúc.

Dù sao, nếu bạn suy nghĩ một cách khéo léo và sáng tạo thì đây có thể là một điểm khởi đầu tốt. Điều tốt nhất để làm là học cách bot hoạt động.

Tôi cũng nghĩ về việc lừa đảo một số ID hoặc cách các thuộc tính trên thành phần trang được hiển thị:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

thay đổi hình thức mỗi lần vì một số bot có thể được đặt để tìm kiếm các mẫu cụ thể trong trang của bạn hoặc các yếu tố được nhắm mục tiêu.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"

1
Bạn không chỉ muốn cấm họ, bạn muốn hoàn toàn say mê với họ ... TÔI YÊU NÓ!
Zoidberg

Cấm tàng hình là chính xác những gì tôi đã nghĩ đến (còn gọi là Shadowbanning, cấm địa ngục).
ErikE

1

Bạn không thể ngừng cạo màn hình bình thường. Dù tốt hay xấu, đó là bản chất của web.

Bạn có thể làm cho nó để không ai có thể truy cập vào một số thứ nhất định (bao gồm các tệp nhạc) trừ khi họ đăng nhập như một người dùng đã đăng ký. Nó không quá khó để làm trong Apache . Tôi cho rằng nó sẽ không quá khó để làm trong IIS.


1

Một cách sẽ là phân phát nội dung dưới dạng các thuộc tính XML, chuỗi được mã hóa URL, văn bản được định dạng sẵn bằng JSON được mã hóa HTML hoặc URI dữ liệu, sau đó chuyển đổi nó thành HTML trên máy khách. Dưới đây là một vài trang web thực hiện việc này:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Cửa hàng Chrome trực tuyến : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Bing News : URL dữ liệu

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : Chuỗi được mã hóa URL

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : Thực thể HTML + JSON được định dạng sẵn

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Tải nhanh

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
  • XMLCalabash : XML được đặt tên + Loại MIME tùy chỉnh + Phần mở rộng tệp tùy chỉnh

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>

Nếu bạn xem nguồn trên bất kỳ mục nào ở trên, bạn sẽ thấy rằng việc nạo sẽ đơn giản trả lại siêu dữ liệu và điều hướng.


Vì vậy, ... cách tiếp cận đó làm cho việc nạo thậm chí dễ dàng hơn, vì nội dung hiện ở định dạng thống nhất. Trên thực tế, nó sẽ không còn được gọi là cào nữa: nó được gọi là phân tích cú pháp và thực sự rất dễ thực hiện theo chương trình.
jpaugh

1

Hầu hết đã được nói, nhưng bạn đã xem xét bảo vệ CloudFlare chưa? Ý tôi là thế này:

Mô tả hình ảnh

Các công ty khác cũng có thể làm điều này, CloudFlare là người duy nhất tôi biết.

Tôi khá chắc chắn rằng điều đó sẽ làm phức tạp công việc của họ. Tôi cũng đã từng bị IP tự động cấm trong 4 tháng khi tôi cố gắng loại bỏ dữ liệu của một trang web được CloudFlare bảo vệ do giới hạn tốc độ (tôi đã sử dụng vòng yêu cầu AJAX đơn giản).


1

Tôi đồng ý với hầu hết các bài đăng ở trên và tôi muốn thêm rằng công cụ tìm kiếm của bạn càng thân thiện với trang web của bạn thì nó càng có khả năng cạo. Bạn có thể thử làm một vài điều rất khó hiểu đối với người dọn dẹp, nhưng nó cũng có thể ảnh hưởng đến khả năng tìm kiếm của bạn ... Tất nhiên phụ thuộc vào việc bạn muốn trang web của mình xếp hạng như thế nào trên các công cụ tìm kiếm.


0

Đặt nội dung của bạn đằng sau một hình ảnh xác thực có nghĩa là robot sẽ khó truy cập nội dung của bạn. Tuy nhiên, con người sẽ bất tiện vì vậy có thể là điều không mong muốn.


0

Nếu bạn muốn xem một ví dụ tuyệt vời, hãy xem http://www.bkstr.com/ . Họ sử dụng thuật toán aj / s để đặt cookie, sau đó tải lại trang để nó có thể sử dụng cookie để xác thực rằng yêu cầu đang được chạy trong trình duyệt. Một ứng dụng máy tính để bàn được xây dựng để cạo, chắc chắn có thể có được điều này, nhưng nó sẽ ngăn chặn hầu hết các loại cURL.


0

Trình quét màn hình hoạt động bằng cách xử lý HTML. Và nếu họ quyết tâm lấy dữ liệu của bạn thì bạn không thể làm gì nhiều về mặt kỹ thuật vì nhãn cầu của con người xử lý mọi thứ. Về mặt pháp lý, nó đã được chỉ ra rằng bạn có thể có một số truy đòi mặc dù và đó sẽ là đề nghị của tôi.

Tuy nhiên, bạn có thể ẩn phần quan trọng của dữ liệu bằng cách sử dụng logic trình bày không dựa trên HTML

  • Tạo tệp Flash cho mỗi nghệ sĩ / album, v.v.
  • Tạo một hình ảnh cho mỗi nội dung nghệ sĩ. Có lẽ chỉ cần một hình ảnh cho tên nghệ sĩ, vv là đủ. Thực hiện việc này bằng cách hiển thị văn bản lên tệp JPEG / PNG trên máy chủ và liên kết với hình ảnh đó.

Hãy nhớ rằng điều này có thể sẽ ảnh hưởng đến thứ hạng tìm kiếm của bạn.


0

Tạo HTML, CSS và JavaScript. Viết trình tạo dễ dàng hơn trình phân tích cú pháp, vì vậy bạn có thể tạo mỗi trang được phân phát khác nhau. Bạn không còn có thể sử dụng bộ đệm hoặc nội dung tĩnh sau đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.