Tôi đang cố gắng xây dựng một regexp sẽ đánh giá đúng cho User-Agent
: s của "trình duyệt được điều hướng bởi con người", nhưng sai cho chương trình. Không cần phải nói rằng sự kết hợp sẽ không chính xác, nhưng nếu nó đạt được những điều đúng đắn, thì 90% các trường hợp đó là quá đủ.Regexp phù hợp với tác nhân người dùng của trình duyệt người dùng cuối nhưng KHÔNG thu thập thông tin> độ chính xác 90%
Cách tiếp cận của tôi cho đến nay là nhắm mục tiêu chuỗi User-Agent
của năm trình duyệt máy tính để bàn chính (MSIE, Firefox, Chrome, Safari, Opera). Cụ thể là tôi muốn regexp KHÔNG để khớp nếu tác nhân người dùng là bot (Googlebot, msnbot, v.v.).
Hiện nay tôi đang sử dụng regexp sau đó xuất hiện để đạt được độ chính xác mong muốn:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Tôi đã quan sát thấy số ít âm tính giả mà chủ yếu là các trình duyệt di động. Các trường hợp ngoại lệ phù hợp:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Câu hỏi của tôi là: Với mức độ chính xác mong muốn, bạn sẽ cải thiện regexp như thế nào? Bạn có thể nghĩ ra bất kỳ sai lầm tích cực sai hoặc âm tính giả nào đối với regexp đã cho không?
Xin lưu ý rằng câu hỏi đặc biệt về kết hợp dựa trên regexp dựa trên User-Agent
. Có một loạt các cách tiếp cận khác để giải quyết vấn đề này, nhưng chúng nằm ngoài phạm vi của câu hỏi này.
gì về chương trình để nhận dạng như các trình duyệt? – Macha
Macha: Rõ ràng chúng sẽ được phân loại là trình duyệt. Nhưng chừng nào chúng còn hiếm thì chúng sẽ không là vấn đề với mục tiêu chính xác đã nêu. – knorv
Vâng, errybody đang chạy bot thông qua trang web của bạn là trung thực. Giải pháp tốt nhất là suy nghĩ lại những gì bạn đang làm ở đây và làm thế nào bạn đang đi về nó. Hầu hết mọi người thích phát hiện bot theo hành vi (nhiều trang khác nhau trong một khoảng thời gian rất ngắn) thay vì tác nhân người dùng. – Will