나는 클라이언트를 위해 웹 사이트를 운영하고 있으며 수년간 정확하고 느리게 수집 된 많은 정보 데이터베이스를 표시합니다. 그들은 다양한 장소에서 웹을 통해 데이터를 찾고 있습니다. 스크레이퍼가 페이지 단위로 사이트를 통과하고 필요한 정보를 자체 데이터베이스로 추출하기 때문일 가능성이 높습니다. 궁금한 점이 있으면 사이트의 각 카테고리에 하나의 데이터가 심어 져 있기 때문에 데이터임을 알고 있습니다.
지난 며칠 동안 이것에 대해 많은 연구를 해왔으며 완벽한 포괄 솔루션이 없다는 것을 알 수 있습니다. 그러나 이것을 달성하기가 좀 더 어려워졌습니다. 이것이 내가 클라이언트를 위해 구현 한 것입니다.
Ajaxified 페이지 매김 데이터
페이지 매김 된 데이터가 많고 URL 끝에 다른 번호를 추가하여 데이터를 페이지 매김하는 경우 (예 : http://www.domain.com/category/programming/2) – 크롤러의 작업이 훨씬 쉬워졌습니다. 첫 번째 문제는 쉽게 식별 할 수있는 패턴으로되어있어 스크래퍼를 느슨하게 설정하는 것이 파이처럼 쉽다는 것입니다. 두 번째 문제점은 카테고리에서 후속 페이지의 URL에 관계없이 다음에 연결할 수있는 다음 및 이전 링크가있을 가능성이 큽니다.
페이지를 다시로드하지 않고 자바 스크립트를 통해 페이지 매김 데이터를로드하면 많은 스크레이퍼 작업이 크게 복잡해집니다. Google은 최근에 페이지에서 자바 스크립트를 파싱하기 시작했습니다. 이와 같이 데이터를 다시로드하면 단점이 거의 없습니다. Google에서 색인을 생성 할 수있는 페이지를 몇 개 줄이지 만 기술적으로 페이지 매김 된 데이터는 모두 정규화를 통해 루트 카테고리 페이지를 가리켜 야합니다. 페이지 데이터 페이지를 Ajaxify하십시오.
템플릿 출력 무작위 화
스크레이퍼는 종종 데이터에 맞게 약간 사용자 정의됩니다. 제목에 대한 특정 div id 또는 클래스, 설명을위한 모든 행의 세 번째 셀 등에 고정됩니다. 대부분의 스크레이퍼가 동일한 테이블에서 오는 대부분의 데이터로 작업하기 쉬운 패턴이 있습니다. 같은 템플릿으로 표시됩니다. div ID와 클래스 이름을 무작위로 지정하고 너비가 0 인 임의의 빈 테이블 열을 삽입하십시오. 한 페이지의 테이블에 스타일이 지정된 div와 다른 템플릿의 조합으로 데이터를 표시하십시오. 데이터를 예측 가능하게 제시하면 예측 가능하고 정확하게 스크랩 할 수 있습니다.
꿀단지
이것은 단순성에서 매우 깔끔합니다. 사이트 스크래핑 방지에 대한 여러 페이지에서이 방법을 사용했습니다.
- gotcha.html이라는 새 파일을 서버에 작성하십시오.
- robots.txt 파일에서 다음을 추가하십시오.
사용자 에이전트: *
허용 안 함 : /gotcha.html
이것은 모든 로봇과 스파이더에게 gotcha.html 파일을 색인화하지 않도록 사이트를 색인화합니다. 일반적인 웹 크롤러는 robots.txt 파일의 희망 사항을 존중하며 해당 파일에 액세스하지 않습니다. 즉, 구글과 빙. 실제로이 단계를 구현하고 24 시간 후에 다음 단계로 넘어갈 수 있습니다. 이렇게하면 robots.txt 파일을 업데이트 할 때 크롤러가 이미 크롤링 중이기 때문에 크롤러가 실수로 차단되지 않습니다. - 웹 사이트 어딘가에 gotcha.html에 대한 링크를 배치하십시오. 어디에 있든 상관 없습니다. 그러나 바닥 글에서는 CSS에서 display : none;이 링크가 보이지 않는지 확인하십시오.
- 이제이 페이지를 방문한 퍼프의 IP / 일반 정보를 기록하고 차단하십시오. 또는 잘못된 데이터와 가비지 데이터를 제공하는 스크립트를 만들 수 있습니다. 아니면 당신에게 그들에게 좋은 개인적인 메시지.
일반 웹 뷰어는 링크를 볼 수 없으므로 실수로 클릭되지 않습니다. 평판이 좋은 크롤러 (예 : Google)는 robots.txt의 희망 사항을 존중하며 파일을 방문하지 않습니다. 따라서이 페이지를 우연히 발견 할 수있는 유일한 컴퓨터는 악의적 인 의도를 가진 사람이거나 누군가가 소스 코드를보고 임의로 클릭하는 것입니다 (그렇다면 잘 진행됩니다).
이것이 항상 작동하지 않을 수있는 몇 가지 이유가 있습니다. 첫째, 많은 스크레이퍼는 일반 웹 크롤러처럼 작동하지 않으며 사이트의 모든 페이지에서 모든 링크를 따라 가서 데이터를 검색하지 않습니다. 스크레이퍼는 종종 특정 페이지를 수정하고 특정 구조 만 따르도록 만들어졌습니다. 예를 들어, 스크래퍼는 카테고리 페이지에서 시작된 다음 슬러그에 / data 단어가있는 URL 만 방문하도록 지시 할 수 있습니다. 둘째, 누군가가 다른 네트워크와 동일한 네트워크에서 스크레이퍼를 실행 중이고 공유 IP가 사용중인 경우 전체 네트워크를 차단하게됩니다. 이것이 문제가되기 위해서는 정말로 인기있는 웹 사이트가 있어야합니다.
즉시 이미지에 데이터 쓰기
긴 텍스트 문자열이 아닌 더 작은 데이터 필드를 찾으면 페이지 스타일을 좀 더 어렵게 만들 수 있습니다. 이미지 안에이 데이터를 출력하면 거의 모든 프로그래밍 언어에 이미지에 텍스트를 동적으로 쓰는 PHP (imagettftext)의 메소드가 있다고 확신합니다. 숫자가 훨씬 중요하지 않은 SEO 이점을 제공하므로 숫자 값으로 가장 효과적입니다.
대안
이것은이 프로젝트에 대한 옵션이 아니 었습니다. 일정량의 페이지 뷰 후 로그인을 요구하거나 로그인하지 않고 제한된 양의 데이터를 표시합니다. 즉, 열이 10 개인 경우 로그인하지 않은 사용자에게는 5 만 표시합니다.
이 실수 하지마
봇의 사용자 에이전트를 기반으로 한 일종의 솔루션을 만들려고 노력하지 마십시오. 이 정보는 수행중인 작업을 알고있는 스크레이퍼가 쉽게 스푸핑 할 수 있습니다. 예를 들어 Google 봇은 쉽게 에뮬레이션 할 수 있습니다. 귀하는 Google을 금지하고 싶지 않을 것입니다.