2013-07-07 44 views
7

Tôi đã xây dựng một trình quản lý quảng cáo khá cơ bản cho một trang web bằng PHP.Loại trừ chương trình và trình thu thập thông tin khỏi bộ đếm Chế độ xem trong PHP

Tôi nói cơ bản vì nó không phức tạp như quảng cáo Google hoặc Facebook hoặc thậm chí hầu hết các máy chủ quảng cáo cao cấp. Không xử lý thanh toán hoặc bất kỳ thứ gì hoặc thậm chí là nhắm mục tiêu người dùng.

Nó phục vụ mục đích cho trang web lưu lượng truy cập thấp của tôi mặc dù chỉ đơn giản hiển thị quảng cáo biểu ngữ ngẫu nhiên, đếm số lần hiển thị và lần nhấp.

Các tính năng: khe/vị trí

  • quảng cáo trên trang
  • Banner hình ảnh
  • Tên
  • Xem/bộ đếm hiển thị
  • Bấm quầy
  • Bắt đầu và ngày kết thúc, hoặc không bao giờ kết thúc
  • Vô hiệu/bật quảng cáo

Tôi muốn dần dần thêm nhiều chức năng hơn cho hệ thống.

Một điều tôi đã nhận thấy là số lần hiển thị/lượt xem có vẻ như tăng cao.

Tôi tin rằng nguyên nhân của việc này là từ trình thu thập dữ liệu và rô bốt của mạng xã hội cũng như trình thu thập thông tin của công cụ tìm kiếm. Ví dụ: nếu ai đó nhập URL từ trang trên trang web của tôi vào Facebook, Google+, Twitter, LinkedIn, Pinterest và các mạng khác, các trang web đó thường sẽ thu thập dữ liệu trang web của tôi để thu thập các trang web Tiêu đề, hình ảnh và mô tả .

Tôi thực sự muốn tắt tính năng này khi tính số lần hiển thị/lượt xem quảng cáo khi một người thực sự không xem trang.

Tôi nhận ra điều này sẽ rất khó để phát hiện tất cả những điều này nhưng nếu có cách để có được đa số, ít nhất nó sẽ làm cho số liệu thống kê của tôi chính xác hơn một chút.

Vì vậy, tôi đang liên hệ với bất kỳ trợ giúp hoặc ý tưởng nào về cách đạt được mục tiêu của mình? Xin đừng nói đến sử dụng một hệ thống quảng cáo, mà không có trong các loại thẻ, cảm ơn bạn

enter image description here

+2

Bạn nên cân nhắc lọc trên user-agent. Tuy nhiên, bot thông minh sẽ luôn có thể mạo danh trình duyệt. – hexafraction

+0

Tôi sẽ đề xuất phát hành bài đăng ajax sau khi tải trang với id của các biểu ngữ trên trang. Ngoài ra, bạn có thể không cho phép tập lệnh cập nhật này trong robots.txt –

Trả lời

11

Bạn cần phân phối các quảng cáo có JavaScript. Đó là cách duy nhất để tránh hầu hết các trình thu thập thông tin. Chỉ các trình duyệt tải phụ thuộc như Hình ảnh, JS và CSS. 99% robot tránh chúng.

Bạn cũng có thể làm điều này:

// basic crawler detection and block script (no legit browser should match this) 
if(!empty($_SERVER['HTTP_USER_AGENT']) and preg_match('~(bot|crawl)~i', $_SERVER['HTTP_USER_AGENT'])){ 
    // this is a crawler and you should not show ads here 
} 

Bạn sẽ có số liệu thống kê tốt hơn theo cách này. Sử dụng JS cho quảng cáo.

PS: Bạn cũng có thể thử đặt cookie trong JS và sau đó kiểm tra. Trình thu thập thông tin có thể nhận cookie được gửi bằng PHP bằng HTTP nhưng các cookie được đặt trong JS, 99,9% khả năng chúng sẽ bỏ qua. Bởi vì họ cần tải một tệp JS và giải thích nó. Điều đó chỉ được thực hiện bởi các trình duyệt.

+0

Giải pháp này có vẻ là tốt nhất vào thời điểm này nhưng đối với một ứng dụng quảng cáo tự phát triển, tôi sẽ không khuyên bạn nên, trình thu thập thông tin phát triển với tốc độ rất cao. Vì ngày càng nhiều trang web sẽ sử dụng js để xác thực người dùng, trình thu thập thông tin sẽ thực hiện nó ... –

+0

@alexalex ** Không, họ sẽ không, vì JS phản hồi lại ý kiến ​​của người dùng. ** Chuột, bàn phím và ... trình thu thập thông tin không thể tạo tất cả kết hợp của đầu vào đó và theo dõi những gì JS đang làm. Google không bao gồm JS khi họ chụp nhanh các trang để xem trước. Nhưng chúng cũng bị kẹt trên lớp 'onLoad' và không có sự tương tác nào. * Vậy ... KHÔNG.* Không có trình thu thập thông tin trong nhà nào sẽ biện minh cho việc tải JS, ngay bây giờ và trong tương lai gần. – CodeAngry

+0

Tôi thích máy in đậm ... http://www.emoticode.net/python/rendered-javascript-crawler-with-scrapy-and-selenium-rc.html ý bạn là gì? Băng cach nao? chúng tôi đang nói về người quản lý quảng cáo, vì vậy tôi có thể thấy nhiều lý do để tạo trình thu thập thông tin sẽ trúng quảng cáo ... Tôi chỉ muốn nói rằng bất kỳ giải pháp nào cho phát hiện spider/bot, trường này chỉ là giải pháp cho thời gian -> nó có để ong liên tục cập nhật ... nói rằng sử dụng js là tốt nhất là chính xác (tôi upvoted câu trả lời) nhưng điều này là solutin cho một tương lai gần ... Tôi không chắc ... –

0

Bạn có thể làm một cái gì đó như thế này: Có một danh sách tốt về trình thu thập trong định dạng văn bản ở đây: http://www.robotstxt.org/db/all.txt

giả sử bạn đã thu thập tất cả các đại lý người dùng trong tập tin đó trong một mảng gọi $botList

$ua = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : NULL; 

if($ua && in_array($ua, $botList)) { 
    // this is probably a bot 
} 

Tất nhiên, tác nhân người dùng có thể dễ dàng được thay đổi d hoặc có thể bị thiếu đôi khi, nhưng các công cụ tìm kiếm như Google và Yahoo là trung thực về bản thân họ.

+0

-1 Bạn không dạy anh ta xem qua 256KB tác nhân người dùng và so sánh các chuỗi với rất nhiều khả năng! Bạn không nói với anh ta để giết hiệu suất của trang web của mình! Đúng? – CodeAngry

+0

Bạn đã kiểm tra danh sách đó chưa? Tôi đã nói chỉ lấy văn bản tác nhân người dùng và đặt chúng vào một mảng. Và tôi có nghĩa là không phải trong thời gian chạy, một thời gian bằng tay mã hóa. Điều này sẽ hầu như không ảnh hưởng đến hiệu suất. Thái độ của bạn là btw rất không có cấu trúc. – keune

+0

Nó rất không có cấu trúc :) Và luôn luôn có hiệu suất cao. Đọc phản ứng của tôi để xem thái độ của tôi. – CodeAngry

0

Trình thu thập thông tin sẽ tải xuống robots.txt, ngay cả khi trình thu thập dữ liệu không tôn trọng và làm nó tò mò. Đây là một dấu hiệu tốt bạn có thể đối phó với một, mặc dù nó không xác định.

Bạn có thể phát hiện trình thu thập thông tin nếu anh ấy truy cập một số lượng lớn các liên kết trong một thời gian rất ngắn. Điều này có thể khá phức tạp để làm trong mã mặc dù.

Nhưng điều đó chỉ khả thi nếu bạn không muốn hoặc không thể chạy Javascript. Nếu không thì hãy đi với câu trả lời của CodeAngry.


Chỉnh sửa: Đáp lại câu trả lời @ keune, bạn có thể giữ tất cả IP truy cập và chạy chúng thông qua danh sách trong một công việc định kỳ, sau đó xuất bản số lượng khách truy cập được cập nhật.

+1

** Tôi thu thập thông tin trên web như điên nhưng không bao giờ bận tâm đến 'robots.txt';) ** Truy cập theo dõi' robots.txt' có thể được thực hiện bằng 'nhật ký truy cập thô' hoặc' tạo tệp trong php'. Nó làm phức tạp mọi thứ một chút và sẽ không ngăn các trình thu thập thông tin râm ... ** Tốc độ truy cập có thể là một chỉ báo ** nhưng tôi hầu như luôn tải một trang từ mỗi tên miền khi thu thập thông tin. Và nó có thể tắc nghẽn nghiêm trọng trong DB viết truy cập nếu không được thực hiện đúng cách. – CodeAngry

+0

Bạn là một con nhện thô lỗ rồi. – rath

+2

Tôi là một người nhện ** **. Chúng ta đều giống nhau :) Tại sao bạn muốn dính ra khi bạn cần phải đi không được chú ý ... – CodeAngry

0

Hãy thử điều này:

if (preg_match("/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i", $_SERVER['HTTP_USER_AGENT']) && !preg_match("/bot|crawl|crawler|slurp|spider|link|checker|script|robot|discovery|preview/i", $_SERVER['HTTP_USER_AGENT'])) { 
    It's not a bot 
} else { 
    It's a bot 
} 
Các vấn đề liên quan