사이트 스크래핑을 방지하려면 어떻게합니까? [닫은]


301

큰 아티스트 데이터베이스가있는 상당히 큰 음악 웹 사이트가 있습니다. 사이트의 데이터를 긁어내는 다른 음악 사이트에 주목했습니다 (여기저기서 아티스트 이름을 입력 한 다음 Google에서 검색합니다).

화면 스크래핑을 방지하려면 어떻게해야합니까? 가능합니까?


9
IP 또는 이와 유사한 도구를 통해 스크레이퍼를 감지하고 (로그 확인) 데이터를 완전히 가짜로 만드는 것을 고려 했습니까? 이렇게하면 사이트를 "스크래핑"할 수 있지만 "데이터"는 쓸모가 없습니다.
Lasse V. Karlsen

30
거꾸로 사탕과 반전 / 스크램블 텍스트 사람?
Wayne Werner



2
@JonasCz 아이러니 한 농담이었습니다. 안타깝지만 비판에도 불구하고 비슷한 제안이 귀하의 답변에 포함되어 있습니다.
Tomáš Zato-복원 모니카

답변:


325

참고 : 이 답변의 전체 버전이 스택 오버플로의 길이 제한을 초과 하므로 자세한 내용과 함께 확장 버전을 읽으 려면 GitHub 로 이동 해야합니다 .


스크래핑 ( Webscraping , Screenscraping , 웹 데이터 마이닝 , 웹 하베스 팅 또는 웹 데이터 추출 이라고도 함)을 방지 하기 위해 이러한 스크레이퍼의 작동 방식과 확장에 의해 스크래퍼가 제대로 작동하지 않는 이유를 파악하는 데 도움이됩니다.

다양한 유형의 스크레이퍼가 있으며 각각 다르게 작동합니다.

  • 같은 거미, 구글 봇 과 같은 또는 웹 사이트 복사기 HTtrack 반복적으로 데이터를 얻기 위해 다른 페이지로 링크를 따라. 이들은 때때로 특정 데이터를 얻기 위해 대상 스크랩에 사용되며, 종종 각 페이지에서 원하는 데이터를 추출하기 위해 HTML 파서와 함께 사용됩니다.

  • 쉘 스크립트 : 때때로 일반적인 유닉스 도구가 스크랩에 사용됩니다 : Wget 또는 Curl을 사용하여 페이지를 다운로드하고 Grep (Regex)을 사용하여 데이터를 추출합니다.

  • Jsoup, Scrapy 및 기타를 기반으로하는 HTML 파서 쉘 스크립트 정규 표현식 기반의 것과 비슷하게 HTML의 패턴을 기반으로 페이지에서 데이터를 추출하여 일반적으로 다른 모든 것을 무시합니다.

    예 : 웹 사이트에 검색 기능이있는 경우 이러한 스크레이퍼는 검색 요청을 제출 한 다음 검색 결과 링크와 제목 만 가져 오기 위해 결과 페이지 HTML에서 모든 결과 링크와 제목을 가져올 수 있습니다. . 이것들이 가장 일반적입니다.

  • 스크린 스크레이퍼 (예 : Selenium 또는 PhantomJS ( 실제 브라우저에서 웹 사이트를 열고 JavaScript, AJAX 등을 실행 한 다음 일반적으로 웹 페이지에서 원하는 텍스트를 가져옵니다.

    • 페이지가로드되고 JavaScript가 실행 된 후 브라우저에서 HTML을 가져온 다음 HTML 파서를 사용하여 원하는 데이터를 추출하십시오. 이것들이 가장 일반적이며 HTML 파서 / 스크레이퍼를 파괴하는 많은 방법이 여기에서도 작동합니다.

    • 렌더링 된 페이지의 스크린 샷을 만든 다음 OCR을 사용하여 스크린 샷에서 원하는 텍스트를 추출합니다. 이들은 드물고 데이터를 실제로 원하는 전용 스크레이퍼 만 설정합니다.

  • ScrapingHub 또는 Kimono 와 같은 웹 스크래핑 서비스 . 실제로 사이트를 긁어 내고 다른 사람들이 사용할 수 있도록 콘텐츠를 가져 오는 방법을 알아내는 사람들이 있습니다.

    당연히 전문적인 긁기 서비스는 저지하기가 가장 어렵지만 사이트를 긁는 방법을 알아 내기가 어렵고 시간이 많이 걸리는 경우 이들 (및 비용을 지불하는 사람들)은 웹 사이트를 긁기 위해 귀찮게하지 않을 수 있습니다.

  • 웹 사이트를 다른 사이트의 페이지에 프레임 으로 포함시키고 사이트를 모바일 앱에 포함시킵니다.

    기술적으로 스크랩되지는 않지만 모바일 앱 (Android 및 iOS)은 웹 사이트를 포함하고 사용자 정의 CSS 및 JavaScript를 삽입하여 페이지 모양을 완전히 변경할 수 있습니다.

  • 휴먼 카피-붙여 넣기 : 사람들은 다른 곳에서 사용하기 위해 컨텐츠를 복사하여 붙여 넣습니다.

이러한 다른 종류의 스크레이퍼 사이에는 많은 중복이 있으며 많은 스크레이퍼는 다른 기술과 방법을 사용하더라도 유사하게 작동합니다.

이 팁은 주로 내 자신의 아이디어, 스크레이퍼를 작성하는 동안 겪은 다양한 어려움, 인터 웹 주변의 정보 및 아이디어를 제공합니다.

스크래핑을 중지하는 방법

결정한 스크레이퍼는 여전히 스크래핑 방법을 알아낼 수 있기 때문에 완전히 예방할 수는 없습니다 . 그러나 몇 가지 작업을 수행하면 많은 스크래핑을 막을 수 있습니다.

로그 및 트래픽 패턴을 모니터링하십시오. 비정상적인 활동이 보이면 액세스를 제한하십시오.

정기적으로 로그를 확인하고 동일한 IP 주소의 많은 유사한 작업과 같은 자동 액세스 (스크래퍼)를 나타내는 비정상적인 활동이 발생하는 경우 액세스를 차단하거나 제한 할 수 있습니다.

구체적으로, 몇 가지 아이디어 :

  • 속도 제한 :

    특정 시간에 사용자 (및 스크레이퍼) 만 제한된 수의 작업을 수행 할 수 있습니다. 예를 들어 특정 IP 주소 또는 사용자로부터 초당 몇 번의 검색 만 허용합니다. 이로 인해 스크레이퍼 속도가 느려지고 효과가 떨어집니다. 작업이 실제 사용자보다 너무 빠르거나 빠른 경우 보안 문자를 표시 할 수도 있습니다.

  • 비정상적인 활동 감지 :

    특정 IP 주소의 유사한 요청이 많거나 페이지를 너무 많이 보거나 검색을 비정상적으로 수행하는 등 비정상적인 활동이 발생하면 액세스를 막거나 후속 요청에 대한 보안 문자를 표시 할 수 있습니다.

  • IP 주소별로 모니터링 및 속도 제한을하지 말고 다른 표시기를 사용하십시오.

    차단 또는 속도 제한을 수행하는 경우 IP 주소별로하지 마십시오. 다른 표시기 및 방법을 사용하여 특정 사용자 또는 스크레이퍼를 식별 할 수 있습니다. 특정 사용자 / 스크래퍼를 식별하는 데 도움이되는 몇 가지 지표는 다음과 같습니다.

    • 사용자가 양식을 작성하는 속도 및 버튼 클릭 위치

    • 화면 크기 / 해상도, 시간대, 설치된 글꼴 등과 같은 JavaScript로 많은 정보를 수집 할 수 있습니다. 이를 사용하여 사용자를 식별 할 수 있습니다.

    • HTTP 헤더 및 순서, 특히 User-Agent

    예를 들어, 단일 IP 주소에서 많은 요청을 받으면 모두 동일한 사용자 에이전트, 화면 크기 (JavaScript로 결정) 및 사용자 (이 경우 스크레이퍼)를 사용하여 항상 같은 방식으로 버튼을 클릭합니다. 정기적으로 화면 스크레이퍼 일 것입니다. 유사한 요청을 일시적으로 차단할 수 있습니다 (예 : 해당 특정 IP 주소에서 들어오는 해당 사용자 에이전트 및 화면 크기의 모든 요청 차단). 이렇게하면 해당 IP 주소의 실제 사용자에게 불편을주지 않습니다. 공유 인터넷 연결의 경우.

    분산 된 스크래핑 (봇넷 또는 프록시 네트워크를 사용하는 스크레이퍼)을 나타내는 다른 IP 주소에서 온 경우에도 유사한 요청을 식별 할 수 있으므로이를 더 수행 할 수도 있습니다. 다른 동일한 요청이 많이 있지만 다른 IP 주소에서 온 경우 차단할 수 있습니다. 다시 한 번, 실수로 실제 사용자를 차단하지 않도록주의하십시오.

    많은 정보를 얻을 수 있기 때문에 JavaScript를 실행하는 스크린 스크래퍼에 효과적입니다.

    보안 스택 교환에 대한 관련 질문 :

  • 일시적으로 액세스를 차단하는 대신 보안 문자를 사용하십시오.

    속도 제한을 구현하는 간단한 방법은 일정 시간 동안 액세스를 일시적으로 차단하는 것이지만 Captcha를 사용하는 것이 더 나을 수 있습니다. 자세한 내용은 Captchas 섹션을 참조하십시오.

등록 및 로그인 필요

귀하의 사이트에 적합한 콘텐츠를 보려면 계정을 만들어야합니다. 이는 스크레이퍼에 대한 좋은 억제책이지만 실제 사용자에게는 좋은 억제책이기도합니다.

  • 계정 생성 및 로그인이 필요한 경우 사용자 및 스크레이퍼 작업을 정확하게 추적 할 수 있습니다. 이렇게하면 특정 계정이 스크래핑에 사용되는시기를 쉽게 감지하고 금지 할 수 있습니다. IP 주소 대신 특정 스크레이퍼를 식별 할 수 있으므로 속도 제한 또는 남용 탐지 (예 : 짧은 시간에 수많은 검색 등)가 쉬워집니다.

많은 계정을 생성하는 스크립트를 피하려면 다음을 수행해야합니다.

  • 등록을 위해 이메일 주소가 필요하고 계정을 활성화하기 위해 열어야하는 링크를 보내 이메일 주소를 확인하십시오. 이메일 주소 당 하나의 계정 만 허용하십시오.

  • 등록 / 계정 생성 중에 보안 문자를 해결해야합니다.

콘텐츠를보기 위해 계정을 만들도록 요구하면 사용자와 검색 엔진이 멀어집니다. 기사를보기 위해 계정을 만들어야하는 경우 사용자는 다른 곳으로 이동합니다.

클라우드 호스팅 및 스크래핑 서비스 IP 주소의 액세스 차단

때때로 스크레이퍼는 Amazon Web Services 또는 GAE와 같은 웹 호스팅 서비스 또는 VPS에서 실행됩니다. 그러한 클라우드 호스팅 서비스에서 사용하는 IP 주소에서 발생하는 요청에 대해서는 웹 사이트에 대한 액세스를 제한하거나 보안 문자를 표시하십시오.

마찬가지로 스크레이퍼는 이러한 프록시 서버를 사용하여 많은 요청이 감지되지 않도록 프록시 또는 VPN 공급자가 사용하는 IP 주소의 액세스를 제한 할 수도 있습니다.

프록시 서버 및 VPN의 액세스를 차단하면 실제 사용자에게 부정적인 영향을 줄 수 있습니다.

차단하면 오류 메시지를 비 설명으로 만듭니다.

액세스를 차단 / 제한하는 경우 스크레이퍼에 블록의 원인을 알리지 않도록하여 스크레이퍼를 수정하는 방법에 대한 단서를 제공해야합니다. 따라서 나쁜 아이디어는 다음과 같은 텍스트로 오류 페이지를 표시하는 것입니다.

  • IP 주소 요청이 너무 많습니다. 나중에 다시 시도하십시오.

  • 오류, 사용자 에이전트 헤더가 없습니다!

대신 스크레이퍼에 원인을 알려주지 않는 친숙한 오류 메시지를 표시하십시오. 이와 같은 것이 훨씬 좋습니다.

  • 죄송합니다. 문제가 발생했습니다. helpdesk@example.com문제가 지속되면을 통해 지원에 문의 할 수 있습니다 .

또한 이러한 오류 페이지가 표시되면 실제 사용자에게는 훨씬 사용자 친화적입니다. 실제 사용자가 오류 메시지를 볼 수 있으므로 합법적 인 사용자가 귀하에게 연락하지 못하도록하기 위해 하드 블록 대신 후속 요청에 대한 보안 문자 표시를 고려해야합니다.

스크레이퍼가 웹 사이트에 액세스하고 있다고 의심되면 보안 문자를 사용하십시오.

보안 문자 ( "컴퓨터와 사람을 구별하기위한 완전 자동화 테스트")는 스크레이퍼를 막는 데 매우 효과적입니다. 불행히도, 그들은 또한 사용자를 자극하는 데 매우 효과적입니다.

따라서 스크레이퍼가 가능한 것으로 의심되고 스크래퍼가 아닌 실제 사용자 인 경우 액세스를 차단하지 않고 스크래핑을 중지하려고 할 때 유용합니다. 스크레이퍼가 의심되는 경우 컨텐츠에 대한 액세스를 허용하기 전에 보안 문자 표시를 고려할 수 있습니다.

보안 문자를 사용할 때 알아야 할 사항 :

  • 롤백하지 말고 Google의 reCaptcha 와 같은 것을 사용 하십시오. ) 또한 사이트에서 제공 한 간단한 이미지보다 스크립터가 해결하기가 훨씬 어렵습니다.

  • HTML 마크 업에 보안 문자에 대한 솔루션을 포함시키지 마십시오. 실제로 페이지 자체에 보안 문자 대한 솔루션을 제공하는 웹 사이트를 보았습니다 (아직 잘 숨겨져 있지만). 이런 식으로하지 마십시오. 다시, reCaptcha와 같은 서비스를 사용하면 이런 종류의 문제가 발생하지 않습니다 (올바르게 사용하는 경우).

  • 보안 문자는 대량으로 해결할 수 있습니다 : 실제 저임금의 인간은 보안 문자를 대량으로 해결하는 보안 문자 해결 서비스가 있습니다. 다시 말하지만 reCaptcha를 사용하는 것은 보호 기능이 있으므로 (예를 들어 사용자가 보안 문자를 해결하기 위해 상대적으로 짧은 시간과 같은) 보호하는 것이 좋습니다. 귀하의 데이터가 실제로 가치가 없다면 이러한 종류의 서비스는 사용되지 않을 것입니다.

텍스트 컨텐츠를 이미지로 제공

텍스트를 이미지 서버 측으로 렌더링하여 표시 할 수 있으므로 간단한 스크레이퍼가 텍스트를 추출하는 데 방해가됩니다.

그러나 이것은 스크린 리더, 검색 엔진, 성능 및 기타 모든 것에 좋지 않습니다. 접근성, 예를 들어 미국 장애인 법 (Americans with Disabilities Act) 등으로 인해 일부 지역에서는 불법이며, 일부 OCR로 우회하기도하므로 그렇게하지 마십시오.

CSS 스프라이트로 비슷한 것을 할 수 있지만 같은 문제가 발생합니다.

완전한 데이터 세트를 공개하지 마십시오 :

가능하다면 스크립트 / 봇이 모든 데이터 세트를 가져올 수있는 방법을 제공하지 마십시오. 예를 들어 : 개별 기사가 많은 뉴스 사이트가 있습니다. 온 사이트 검색을 통해 기사를 검색하여 해당 기사에 액세스 할 수 있도록 만들 수 있으며, 사이트의 모든 기사 목록 과 URL이 어디에도없는 경우 해당 기사는 검색을 통해서만 액세스 할 수 있습니다. 특색. 즉, 사이트에서 모든 기사를 가져 오려는 스크립트는 기사를 모두 찾기 위해 기사에 나타날 수있는 모든 문구를 검색해야합니다. 시간이 많이 걸리고 끔찍하게 비효율적이며 희망적으로 만들 것입니다. 스크레이퍼는 포기합니다.

다음과 같은 경우에는 효과가 없습니다.

  • 봇 / 스크립트는 어쨌든 전체 데이터 세트를 원하지 않거나 필요로하지 않습니다.
  • 기사는 다음과 같은 URL로 제공됩니다 example.com/article.php?articleId=12345. 이것은 스크래퍼가 단순히 모든 것들을 반복하고 모든 articleId기사를 그런 식으로 요청할 수있게 해줄 것입니다.
  • 다른 기사로 연결되는 기사 내의 링크를 따라가는 스크립트를 작성하는 등의 방법으로 모든 기사를 찾을 수있는 다른 방법이 있습니다.
  • "and"또는 "the"와 같은 것을 검색하면 거의 모든 것이 드러날 수 있으므로 알고 있어야합니다. (최고 10 또는 20 개의 결과 만 리턴하여이를 피할 수 있습니다).
  • 콘텐츠를 찾으려면 검색 엔진이 필요합니다.

API, 엔드 포인트 및 이와 유사한 것을 노출시키지 마십시오.

의도하지 않게 API를 노출시키지 마십시오. 예를 들어, Adobe Flash 또는 Java Applets (God forbid!) 내에서 AJAX 또는 네트워크 요청을 사용하여 데이터를로드하는 경우 페이지에서 네트워크 요청을보고 해당 요청이 어디로 가는지 알아내는 것이 쉽지 않습니다. 그런 다음 역 엔지니어링하여 해당 엔드 포인트를 스크레이퍼 프로그램에서 사용하십시오. 설명 된대로 엔드 포인트를 난독 화하고 다른 사람이 사용하기 어렵게하십시오.

HTML 파서 및 스크레이퍼를 방지하려면 다음을 수행하십시오.

HTML 파서는 HTML에서 식별 가능한 패턴을 기반으로 페이지에서 컨텐츠를 추출하여 작동하므로 이러한 패턴을 의도적으로 변경하여 이러한 스크레이퍼를 손상 시키거나 조일 수도 있습니다. 이 팁의 대부분은 스파이더 및 스크린 스크레이퍼와 같은 다른 스크레이퍼에도 적용됩니다.

HTML을 자주 변경

HTML 페이지를 식별 할 수있는 특정 부분에서 컨텐츠를 추출하여 HTML을 직접 처리하는 스크레이퍼. 예를 들어, 웹 사이트의 모든 페이지에 기사 텍스트가 포함 div된 id가 인 article-content경우 사이트의 모든 기사 페이지를 방문하고 article-contentdiv 의 콘텐츠 텍스트를 추출하는 스크립트를 작성하는 것이 간단합니다. 스크래퍼는 각 기사 페이지에 있고, 사이트의 모든 기사는 다른 곳에서 재사용 할 수있는 형식으로되어 있습니다.

HTML과 페이지 구조를 자주 변경하면 이러한 스크레이퍼가 더 이상 작동하지 않습니다.

  • HTML에서 요소의 ID와 클래스를 자주, 심지어 자동으로 변경할 수도 있습니다. 따라서 귀하 div.article-content가와 같이 div.a4c36dda13eaf0바뀌고 매주 변경되는 경우 스크레이퍼는 처음에는 정상적으로 작동하지만 일주일 후에 중단됩니다. ID / 클래스의 길이도 변경하십시오. 그렇지 않으면 스크레이퍼가 div.[any-14-characters]대신 원하는 div를 찾는 데 사용 합니다. 다른 유사한 구멍도 조심하십시오.

  • 마크 업에서 원하는 컨텐츠를 찾을 수있는 방법이 없으면 스크레이퍼는 HTML이 구성되는 방식에서 그렇게합니다. 따라서 모든 기사 페이지가 diva div뒤에 나오는 모든 h1기사 내용이 기사 내용 이라는 점에서 비슷 하면 스크레이퍼는 기사 내용을 기반으로 기사 내용을 가져옵니다. 다시 말하지만, 이것을 깨기 위해 HTML에 마크 업을 주기적으로 그리고 무작위로 추가하거나 제거 할 수 있습니다. 여분 div의 s 또는 spans 추가 . 최신 서버 측 HTML 처리에서는 그렇게 어렵지 않아야합니다.

알아야 할 사항 :

  • 구현, 유지 관리 및 디버깅이 지루하고 어려울 것입니다.

  • 캐싱을 방해합니다. 특히 HTML 요소의 id 또는 클래스를 변경하는 경우 CSS 및 JavaScript 파일에서 해당하는 변경이 필요합니다. 즉, 변경할 때마다 브라우저에서 해당 파일을 다시 다운로드해야합니다. 이로 인해 반복 방문자의 페이지로드 시간이 길어지고 서버로드가 증가합니다. 일주일에 한 번만 변경해도 큰 문제는 아닙니다.

  • 영리한 스크레이퍼는 실제 콘텐츠의 위치를 ​​유추하여 여전히 콘텐츠를 가져올 수 있습니다. 페이지의 단일 텍스트 블록이 실제 기사 일 가능성이 높다는 사실을 알고 있습니다. 이를 통해 여전히 페이지에서 원하는 데이터를 찾고 추출 할 수 있습니다. 보일러 파이프 는 정확히 이것을합니다.

기본적으로 스크립트가 모든 유사한 페이지에 대해 실제 원하는 콘텐츠를 찾기가 쉽지 않은지 확인하십시오.

PHP에서이를 구현하는 방법에 대한 자세한 내용XPath에 따라 크롤러가 페이지 내용가져 오는 것을 방지하는 방법을 참조하십시오 .

사용자의 위치에 따라 HTML을 변경하십시오

이것은 이전 팁과 비슷합니다. 사용자의 위치 / 국가 (IP 주소로 결정)에 따라 다른 HTML을 제공하는 경우 사용자에게 전달되는 스크레이퍼가 손상 될 수 있습니다. 예를 들어, 누군가 사이트에서 데이터를 스크랩하는 모바일 앱을 작성하는 경우 처음에는 제대로 작동하지만 사용자가 다른 국가에있을 수 있으므로 실제로 사용자에게 배포 될 때 중단되므로 HTML이 달라집니다. 내장 스크레이퍼는 소비하도록 설계되지 않았습니다.

자주 HTML을 변경하고 그렇게함으로써 스크레이퍼를 적극적으로 조이십시오!

예 : 웹 사이트에서에 위치한 검색 기능을 사용 example.com/search?query=somesearchquery하면 다음 HTML이 반환됩니다.

<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)

알다시피, 이것은 긁기 쉽다는 것을 알 수 있습니다. 스크레이퍼는 쿼리로 검색 URL을 누르고 반환 된 HTML에서 원하는 데이터를 추출하기 만하면됩니다. 위에서 설명한대로 HTML을 주기적으로 변경하는 것 외에도 이전 ID와 클래스가있는 기존 마크 업을 그대로두고 CSS로 숨기고 가짜 데이터로 채워 스크레이퍼를 감염시킬 수 있습니다. 검색 결과 페이지를 변경하는 방법은 다음과 같습니다.

<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)

이것은 클래스 또는 ID를 기반으로 HTML에서 데이터를 추출하기 위해 작성된 스크레이퍼가 계속 작동하는 것처럼 보이지만 실제 데이터는 CSS로 숨겨져 있기 때문에 실제 사용자가 볼 수없는 가짜 데이터 또는 광고를 얻습니다.

스크레이퍼로 나사 고정 : 보이지 않는 허니팟 데이터를 페이지에 삽입

이전 예제에 추가하여 보이지 않는 허니팟 항목을 HTML에 추가하여 스크레이퍼를 잡을 수 있습니다. 이전에 설명한 검색 결과 페이지에 추가 할 수있는 예 :

<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.)

모든 검색 결과를 얻기 위해 작성된 스크레이퍼는 페이지의 다른 실제 검색 결과와 마찬가지로이를 선택하고 링크를 방문하여 원하는 컨텐츠를 찾습니다. 실제 인간은 (CSS로 숨겨져 있기 때문에) 처음부터 그것을 보지 못하고 링크를 방문하지 않습니다. /scrapertrap/robots.txt에서 허용하지 않기 때문에 Google과 같은 진실하고 바람직한 거미는 링크를 방문하지 않습니다 .

scrapertrap.php방문한 IP 주소에 대한 액세스 차단과 같은 작업을 수행하거나 해당 IP의 모든 후속 요청에 대한 보안 문자를 강제 설정할 수 있습니다 .

  • /scrapertrap/검색 엔진 봇이 여기에 들어 가지 않도록 robots.txt 파일에서 허니팟 ( ) 을 허용 하지 않아야합니다.

  • 이를 HTML을 자주 변경하는 이전 팁과 결합 할 수 있습니다.

  • 스크레이퍼는 결국이를 피하는 법을 배우므로 자주 변경하십시오. 허니팟 URL과 텍스트를 변경하십시오. 또한 스크레이퍼는 style내용을 숨기는 데 사용되는 CSS 속성 이있는 것을 피하는 방법을 배우기 때문에 숨기기에 사용되는 인라인 CSS 변경을 고려하고 ID 속성과 외부 CSS를 대신 사용하려고합니다. 또한 가끔씩 만 활성화하여 스크레이퍼가 처음에는 작동하지만 잠시 후에 중단됩니다. 이것은 이전 팁에도 적용됩니다.

  • 악의적 인 사용자는 허니팟에 대한 링크를 공유하거나 링크를 이미지 (예 : 포럼) 같은 곳에 삽입하여 실제 사용자가 액세스하지 못하게 할 수 있습니다. URL을 자주 변경하고 금지 시간을 비교적 짧게 만드십시오.

스크레이퍼를 감지하면 가짜 및 쓸모없는 데이터 제공

분명히 스크레이퍼가 무엇인지 감지하면 가짜 데이터와 쓸모없는 데이터를 제공 할 수 있습니다. 스크레이퍼가 웹 사이트에서 가져 오는 데이터를 손상시킵니다. 또한 이러한 가짜 데이터를 실제 데이터와 구별하는 것을 불가능하게하여 스크레이퍼가 조여지는 것을 알 수 없도록해야합니다.

예를 들어 : 뉴스 웹 사이트가 있습니다. 액세스를 차단하는 대신 스크레이퍼를 감지하면 무작위로 생성 된 가짜 기사를 제공하면 스크레이퍼가 얻는 데이터를 독살하게됩니다. 가짜 데이터를 실제 데이터와 구별 할 수 없게 만들면 스크레이퍼가 원하는 실제 데이터, 즉 실제 데이터를 얻기가 어려워집니다.

사용자 에이전트가 비어 있거나없는 경우 요청을 수락하지 않습니다

느리게 작성된 스크레이퍼는 종종 요청과 함께 User Agent 헤더를 보내지 않지만 검색 엔진 스파이더뿐만 아니라 모든 브라우저도 마찬가지입니다.

사용자 에이전트 헤더가없는 요청을 받으면 보안 문자를 표시하거나 단순히 액세스를 차단하거나 제한 할 수 있습니다. 또는 위에서 설명한 것처럼 가짜 데이터 나 다른 것을 제공하십시오.

스푸핑은 사소한 것이지만 잘못 작성된 스크레이퍼에 대한 조치로는 구현할 가치가 있습니다.

사용자 에이전트가 일반적인 스크레이퍼 인 경우 요청을 수락하지 마십시오. 스크레이퍼가 사용하는 블랙리스트

경우에 따라 스크레이퍼는 실제 브라우저 나 검색 엔진 스파이더가 사용하지 않는 다음과 같은 사용자 에이전트를 사용합니다.

  • "모질라"
  • "Java 1.7.43_u43"(기본적으로 Java의 HttpUrlConnection은 이와 같은 것을 사용합니다.)
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl".. (Wget 및 cURL은 때때로 기본 스크래핑에 사용됨)

사이트의 스크레이퍼가 특정 사용자 에이전트 문자열을 사용하고 실제 브라우저 나 합법적 인 스파이더가 사용하지 않는 경우이를 블랙리스트에 추가 할 수도 있습니다.

자산 (CSS, 이미지)을 요청하지 않으면 실제 브라우저가 아닙니다.

실제 브라우저는 (거의 항상) 이미지 및 CSS와 같은 자산을 요청하고 다운로드합니다. HTML 파서와 스크레이퍼는 실제 페이지와 내용에만 관심이 있기 때문에 그렇지 않습니다.

에셋에 요청을 기록 할 수 있으며 HTML에 대한 요청이 많으면 스크레이퍼 일 수 있습니다.

검색 엔진 봇, 고대 모바일 장치, 화면 판독기 및 잘못 구성된 장치는 자산을 요청할 수 없습니다.

쿠키를 사용하고 요구합니다. 이를 사용하여 사용자 및 스크레이퍼 작업을 추적하십시오.

웹 사이트를 보려면 쿠키를 활성화해야 할 수 있습니다. 이것은 경험이없고 초보자 스크레이퍼 작성자를 막을 것이지만, 스크레이퍼가 쿠키를 보내는 것은 쉽습니다. 이를 사용하고 필요로하는 경우이를 사용하여 사용자 및 스크레이퍼 작업을 추적 할 수 있으므로 IP 별 대신 사용자별로 속도 제한, 차단 또는 보안 문자 표시를 구현할 수 있습니다.

예를 들어, 사용자가 검색을 수행 할 때 고유 식별 쿠키를 설정하십시오. 결과 페이지를 볼 때 해당 쿠키를 확인하십시오. 사용자가 모든 검색 결과를 열면 (쿠키에서 알 수 있음) 스크레이퍼 일 수 있습니다.

스크레이퍼가 쿠키를 요청과 함께 보내고 필요에 따라 버릴 수 있으므로 쿠키를 사용하면 효과가 없을 수 있습니다. 귀하의 사이트가 쿠키로만 작동하는 경우 쿠키를 비활성화 한 실제 사용자의 액세스도 막을 수 있습니다.

JavaScript를 사용하여 쿠키를 설정하고 검색하면 JavaScript를 실행하지 않는 스크레이퍼는 요청과 함께 쿠키를 검색하고 보낼 수 없으므로 스크래퍼를 차단합니다.

JavaScript + Ajax를 사용하여 컨텐츠로드

페이지 자체가로드 된 후 JavaScript + AJAX를 사용하여 콘텐츠를로드 할 수 있습니다. 그러면 JavaScript를 실행하지 않는 HTML 파서가 컨텐츠에 액세스 할 수 없게됩니다. 이것은 종종 스크레이퍼를 작성하는 초보자 및 경험이없는 프로그래머에게 효과적인 억제책입니다.

다음 사항에 유의하십시오.

  • JavaScript를 사용하여 실제 컨텐츠를로드하면 사용자 경험 및 성능이 저하됩니다

  • 검색 엔진은 JavaScript를 실행하지 않아 콘텐츠를 색인 생성하지 못할 수 있습니다. 검색 결과 페이지에는 문제가되지 않지만 기사 페이지와 같은 다른 경우에는 문제가 될 수 있습니다.

마크 업, 스크립트의 네트워크 요청 및 기타 모든 것을 난독 처리하십시오.

Ajax 및 JavaScript를 사용하여 데이터를로드하는 경우 전송되는 데이터를 난독 처리하십시오. 예를 들어 Ajax를 통해 페치 한 후 서버에서 데이터를 인코딩 한 다음 (base64 또는 그보다 복잡한 것으로 간단한) 클라이언트에서 디코딩 및 표시 할 수 있습니다. 이는 네트워크 트래픽을 검사하는 사람이 페이지 작동 방식을 즉시 보지 못하고 데이터를로드하는 것을 의미하지 않으며, 사용자가 디 스크램블링 알고리즘을 리버스 엔지니어링해야하므로 엔드 포인트에서 요청 데이터를 직접 요청하기가 더 어려워집니다.

  • 데이터를로드하기 위해 Ajax를 사용하는 경우 페이지를 먼저로드하지 않고 엔드 포인트를 사용하기 어렵게 만들어야합니다 (예 : JavaScript 또는 HTML에 포함 할 수있는 일부 세션 키를 매개 변수로 요구).

  • 또한 난독 처리 된 데이터를 초기 HTML 페이지에 직접 포함시키고 JavaScript를 사용하여 난독 화 및 표시하여 추가 네트워크 요청을 피할 수 있습니다. 이렇게하면 스크래퍼를 작성하는 스크립트가 JavaScript를 리버스 엔지니어링해야하기 때문에 JavaScript를 실행하지 않는 HTML 전용 파서를 사용하여 데이터를 추출하기가 훨씬 어려워집니다 (난독 화해야 함).

  • 난독 화 방법을 정기적으로 변경하여 알아 낸 스크레이퍼를 제거 할 수 있습니다.

그러나 이와 같은 작업을 수행하면 몇 가지 단점이 있습니다.

  • 구현, 유지 관리 및 디버깅이 지루하고 어려울 것입니다.

  • 실제로 JavaScript를 실행 한 다음 데이터를 추출하는 스크레이퍼 및 스크린 스크레이퍼에는 효과적이지 않습니다. (대부분의 간단한 HTML 파서는 JavaScript를 실행하지 않습니다)

  • JavaScript가 비활성화되어 있으면 실제 사용자에게는 사이트가 작동하지 않게됩니다.

  • 성능 및 페이지로드 시간이 줄어 듭니다.

비 기술적 :

  • 사람들에게 긁지 말라고 말하면 일부 사람들은 그것을 존중할 것입니다

  • 변호사 찾기

  • 데이터를 제공하고 API를 제공하십시오.

    데이터를 쉽게 사용할 수있게하고 기여 및 사이트로 다시 연결되는 링크가 필요할 수 있습니다. 아마도 $$$를 청구 할 것입니다.

여러 가지 잡다한:

  • Cloudflare 또는 Distill Networks의 스크래핑 방지 ( 여기에서 작동 방식에 대한 세부 정보) 와 같은 상용 스크래핑 방지 서비스도 있습니다.

  • 실제 사용자에 대한 유용성과 스크래퍼 방지 간의 균형을 찾으십시오. 수행하는 모든 작업이 사용자 환경에 어떤 방식 으로든 부정적인 영향을 미치고 타협점을 찾으십시오.

  • 모바일 사이트와 앱을 잊지 마십시오. 모바일 앱이있는 경우 화면을 긁을 수 있으며 네트워크 트래픽을 검사하여 사용하는 REST 엔드 포인트를 결정할 수 있습니다.

  • 스크레이퍼는 다른 스크레이퍼를 긁을 수 있습니다. 귀하의 웹 사이트에서 스크랩 한 내용이있는 웹 사이트가 하나있는 경우 다른 스크레이퍼는 해당 스크레이퍼의 웹 사이트에서 스크랩 할 수 있습니다.

더 읽을 거리 :


11
이것은 나를 여기로 데려왔다. 상당히 인상적인 답변입니다. 또한 상당히 놀라운 개정 이력. 게시물 주셔서 감사합니다. 공감대를 얻습니다. 이 작업에 많은 노력을 기울인 것이 아니라 나에게 유용하기 때문입니다.
DaveTheMinion

1
좋은 대답입니다! 여기 몇 가지 생각이 있습니다. A real browser will (almost always) request and download assets such as images and CSS접근성 독자에게도 해당됩니까? 보안 문자가 깨져서 최소한 전문적인 서비스가 방해받지 않았을 것입니다. 쿠키를 사용하려면 EU에 알림 / 동의가 필요합니다. Find a balance between usability for real users and scraper-proofness또한 프로그래밍 시간 / 복잡성 대 재정적 이익의 균형을 유지합니다.
Eric J.

5
@JonH, 관심이 있으시면 읽을 것입니다. 또한 제목과 하위 제목이 포함 된 단락으로 나누었으므로 사람들이 스캔하여 원하는 부분을 읽을 수 있습니다. 실제로 SO에 대해서도 꽤 긴 답변이 있으며 사람들은 그것을 읽습니다.
JonasCz-복원 모니카

2
@JoshCrozier-나는이 같은 사이트 가이 많은 정보로 잘 재생되지 않는다고 생각합니다. 나는 정보가 나쁘다는 것을 말하는 것이 아닙니다.
JonH

2
추신 콘텐츠 아이디어의 내 스테 가노 그래피 지문은 법정에서 사용될 수 있습니다. 데이터 소유자가 데이터의 고유 한 특성을 통해 데이터를 얻었음을 증명할 때 충격을 상상해보십시오.
ErikE

241

나는 당신이 설정했다고 가정합니다 robots.txt.

다른 사람들이 언급했듯이, 스크레이퍼는 활동의 거의 모든 측면을 위조 할 수 있으며 악의적 인 사용자의 요청을 식별하기가 매우 어려울 수 있습니다.

나는 고려할 것이다 :

  1. 페이지를 설정하십시오 /jail.html.
  2. 페이지에 대한 액세스를 허용 robots.txt하지 않습니다. 따라서 존경스러운 거미는 절대 방문하지 않습니다.
  3. CSS ( display: none)로 숨기고 페이지 중 하나에 링크를 배치하십시오 .
  4. 의 방문자 IP 주소를 기록하십시오 /jail.html.

이를 통해을 무시하고 긁는 스크레이퍼의 요청을 빠르게 식별 할 수 있습니다 robots.txt.

또한 확인 할 수 있습니다 /jail.html가짜 데이터를 (일반 페이지와 같은, 정확한 마크 업이있는 전체 전체 웹 사이트를하지만 /jail/album/63ajdka, /jail/track/3aads8등). 이런 방식으로 불량 스크레이퍼는 완전히 차단할 수있을 때까지 "이상 입력"을 경고하지 않습니다.


48
전에이 기술을 "허니팟"이라고했습니다. 스팸 필터링에도 사용되는 기술로, 페이지에 전자 메일 주소를 입력하지만 숨기거나 사람들이 합법적 인 메일을 보내지 않도록 명확하게합니다. 그런 다음 해당 주소로 메일을 배달하는 메일 서버의 IP 주소를 수집하십시오.
thomasrutter

12
링크를 크롤링한다고 가정합니다. 대부분의 스크레이퍼는 일종의 양식을 제출하고 반환 된 데이터를 스크랩합니다.
바이런 틀록

9
Perl 스크립트에 의해 생성 된 다른 "페이지"에 대한 링크가있는 이메일 용 Perl 기반 허니팟을 보았습니다. robots.txt를 읽는 합법적 인 봇은 그것을 보지 못하고 CSS를 통해 사용자에게 숨겨져 있지만 스크레이퍼 (또는 전자 메일 수확기)는 잘못된 데이터 트리가있는 무한한 깊이의 페이지 트리에 빠르게 잡히게됩니다. 각 페이지의 시작 부분에 스크립트 링크를 넣으십시오.
Stephen P

18
허니팟에 던지는 또 다른 멋진 것은 테 러브 러빙 (또는 타 피팅)입니다. 이것은 내가 좋아하는 오래된 기술입니다. 나쁜 사람을 식별 할 때 시간 초과없이 물리적으로 가능한 한 오랫동안 연결을 열린 상태로 유지하여 스팸 / 스크래핑 프로세스를 크롤링 할 수 있습니다. 물론, 이것은 당신도 그들에게 있다는 것을 경고 할 수 있지만, 재미 있습니다. en.wikipedia.org/wiki/Teergrubing
womp

11
이 방법의 유일한 문제점 은 인기있는 포럼에 [img] yoursite / jail.html [/ img]을 배치하는 것입니다. 당신은 당신의 시스템에 로그인 된 많은 IP를 받게 될 것이고 어느 것이 나쁜 것인지 필터링하기가 어려울 것입니다. 이런 종류의 일을 방지하려면 URL에 IP와 관련된 토큰을 추가해야합니다. jail.php? t = hoeyvm 및 데이터베이스에는 hoeyvm과 페이지를 요청한 IP의 연결이 있습니다.
HoLyVieR

48

고소

진지하게 : 돈이 있다면, 인터넷에서 자신의 길을 알고있는 선량하고 멋진 젊은 변호사와 상담하십시오. 여기서 뭔가를 할 수있을 것입니다. 사이트의 위치에 따라 변호사가 귀하의 국가에서 중지 및 요구 또는 이와 동등한 것을 작성하도록 할 수 있습니다. 당신은 적어도 놈들을 놀라게 할 수 있습니다.

더미 값의 삽입을 문서화하십시오. 명확하게 (하지만 모호하게) 가리키는 더미 값을 삽입하십시오. 나는 이것이 전화 번호부 회사들과 일반적인 관행이라고 생각한다. 그리고 독일에서는, 모방범들이 1 : 1을 모방 한 가짜 항목을 통해 파열되었을 때 몇 가지 사례가 있다고 생각한다.

이 동일한 페이지에 대한 각 요청에 약간 다른 HTML 구조를 사용하는 템플릿 시스템은 이미 도움이 될 비록 SEO, 유효성과 다른 것들 (아래로 드래그, HTML 코드를 엉망으로 당신을 운전한다면 그것은 부끄러운 일 것이다 많은 대하여 콘텐츠를 가져 오기 위해 항상 HTML 구조와 클래스 / ID 이름을 사용하는 스크레이퍼

이와 같은 경우는 저작권법이 좋은 것입니다. 돈을 벌기 위해 다른 사람들의 정직한 일을 없애는 것은 당신이 싸울 수있는 것입니다.


9
법적 구조가 견고한 국가에서만 작동합니다.
TomL

3
변호사들은 갈등을 번성하고 그로부터 이익을 얻습니다. 변호사가 법정에 가지 말라고 조언하는 경우는 거의 없습니다. 승리와 패배는 '정의'라는 훌륭한 개념과는 관련이 없으며 당일의 주장, 분위기 및 편견과는 아무런 관련이 없습니다. 그것이 잘못되면, 당신은 변호사 비용뿐만 아니라 다른 당사자들과 그들이 소송을 제기하기로 결정한 경우에 대해 책임을 질 수 있음을 기억하십시오. 생활에서 집과 다른 자산을 쉽게 잃을 수 있습니다. 내가 제안하는 도박이 아닙니다. 법원은 모든 비용을 피할 것을 권장합니다.
Frankie

3
@TomL에 동의합니다. 그들이 서부에 있다면 다소 그럴듯하다. 그러나 만약 그들이 인도 / 중국 / 러시아 / 우크라이나 / 무엇에 있든간에, 심각하게도, 최소한의 기회는 없습니다. 나는 러시아 법원에 대해 말할 수 있습니다 : 그들은 당신의 주장을 다루는 것을 귀찮게하지 않을 것입니다.
Highstaker

35

이것을 완전히 막기 위해 할 수있는 일은 없습니다. 스크레이퍼는 사용자 에이전트를 위조하거나 여러 IP 주소 등을 사용하여 일반 사용자로 표시 될 수 있습니다. 페이지를로드 할 때 텍스트를 사용할 수 없게 만드는 것은 이미지, 플래시 또는 JavaScript로로드하는 것뿐입니다. 그러나 처음 두 가지는 좋지 않은 아이디어이며, 마지막은 일부 일반 사용자가 JavaScript를 사용할 수없는 경우 접근성 문제입니다.

이들이 사이트를 완전히 훼손하고 모든 페이지를 훑어 보는 경우 일종의 속도 제한을 수행 할 수 있습니다.

그래도 희망이 있습니다. 스크레이퍼는 일관된 형식의 사이트 데이터를 사용합니다. 어떻게 든 무작위화할 수 있으면 스크레이퍼가 손상 될 수 있습니다. 로드 할 때마다 페이지 요소의 ID 또는 클래스 이름을 변경하는 것과 같은 것들. 그러나 그것은 많은 작업이며 가치가 있는지 확실하지 않습니다. 그럼에도 불구하고 그들은 충분한 헌신을 가지고 그 문제를 해결할 수있을 것입니다.


14
화면 긁는 도구는 일반 사람보다 훨씬 빠르게 사이트를 찢어 낼 수 있으므로 분당 IP가 볼 수있는 페이지 수를 제한하는 시스템을 만드는 것이 좋습니다.
TravisO

동의했다. IP는 비용이 많이 들고 대부분의 호스팅 회사에 의해 제한됩니다.
탈 웨이스

re : "각로드마다 페이지 요소의 ID 또는 클래스 이름 변경과 같은 것" PHP를 통해 클래스 이름을 만든 다음 <div class = "<? php echo $ myPHPGeneratedClassName;?>">을 사용하면 임의의 문자열을 사용하여 완전히 고유하게 만들 수도 있습니다. 패턴을 찾는 것을 막는 것은 DOM에서 파싱하기가 훨씬 더 어렵습니다.
의 niggles

IP를 찾는 것은 어렵지 않습니다. 프록시, 친구 컴퓨터, 업무용 컴퓨터, 학교 컴퓨터, 도서관 컴퓨터가 많이 있습니다 ...
시크릿

@ user257493 : 맞습니다. 그러나 여기서 데이터를 긁는 사람에 대해 이야기하고 있습니다. 기회는 그들로 이동하지 않을되는 단지 수확 데이터에 많은 노력. 그리고 만약 그렇다면, 당신은 결국 그들의 IP 공급을 고갈시킬 것입니다.
ryeguy

31

데이터에 액세스 할 수있는 XML API를 제공하십시오. 사용하기 쉬운 방식으로. 사람들이 당신의 데이터를 원한다면 얻을 수 있습니다.

이렇게하면 최소한의 기능만으로도 스크래퍼가 HTTP 요청과 엄청난 양의 대역폭을 방해하지 않도록 기능의 하위 집합을 제공 할 수 있습니다.

그런 다음 데이터를 원하는 사람들에게 API를 사용하도록 설득하기 만하면됩니다. ;)


3
이것은 매우 합리적입니다. 화면 스크래핑은 방지하기가 어렵고 API를 제공하는 경우 일부 제한을 적용하고 알림 ( "--Content from ----.com")을 추가하고 기본적으로 어떤 데이터를 제공할지 제어 할 수 있습니다.
alecwh

6
@alecwh : 액세스 요금이 부과됩니다!
André Caron

3
모든 웹 사이트 에서이 작업을 수행하면 웹이 훨씬 나아지기 때문에 바운티를 수여했습니다. 그것이 더 일반화되기를 바랍니다.
JonasCz-복원 모니카

1
서비스 등록을
마치면

나는이 대화의 반대편에있는 그런 사람입니다. Broadway 쇼를위한 모델을 구축하고 깔끔하게 액세스하기보다는 모든 데이터를 긁어 야합니다.
Yaakov Bressler

22

죄송합니다.이 작업은 정말 어렵습니다.

콘텐츠를 저작권으로 보호하는 경우 콘텐츠를 사용하지 말라고 정중하게 요청하는 것이 좋습니다.

그것이 있고 그들이 그것을 삭제하지 않으면, 당신은 furthur 조치를 취하고 그들에게 중지하고 원하는 편지를 보낼 수 있습니다 .

일반적으로 스크래핑을 방지하기 위해 무엇을 하든지 접근성, 봇 / 스파이더 등과 같은 부정적인 영향이 발생할 수 있습니다.


12

모든 게시물에서 알 수 있듯이 검색 엔진 친화적 인 검색을 원한다면 봇이 긁을 수 있습니다.

그러나 여전히 몇 가지 일을 할 수 있으며 60-70 % 긁는 로봇에 영향을 줄 수 있습니다.

아래처럼 체커 스크립트를 만드십시오.

특정 IP 주소가 매우 빠르게 방문하는 경우 몇 번의 방문 (5-10) 후 IP 주소와 브라우저 정보를 파일이나 데이터베이스에 넣습니다.

다음 단계

(이 과정은 백그라운드 프로세스이며 항상 실행되거나 몇 분 후에 예약됩니다.) 의심스러운 IP 주소를 계속 확인하는 다른 스크립트를 작성하십시오.

사례 1. 사용자 에이전트가 Google, Bing , Yahoo 와 같은 알려진 검색 엔진 인 경우 (구글링하여 사용자 에이전트에 대한 자세한 정보를 찾을 수 있습니다). 그러면 http://www.iplists.com/ 이 표시되어야합니다 . 이 목록과 패턴을 일치 시키십시오. 그리고 가짜 사용자 에이전트처럼 보이는 경우 다음 방문시 보안 문자 를 작성하도록 요청 하십시오. (봇 IP 주소에 대해 조금 더 연구해야합니다. 이것이 달성 가능하다는 것을 알고 IP 주소를 가진 사람도 시도해보십시오. 도움이 될 수 있습니다.)

사례 2. 검색 봇의 사용자 에이전트가 없음 : 다음 방문시 단순히 보안 문자를 작성하도록 요청하십시오.


+1 iplists.com을 사용하는 것은 훌륭한 아이디어입니다.
Daniel Trebbien

10

늦은 답변-그리고이 답변은 아마도 당신이 듣고 싶은 것이 아닐 것입니다 ...

나 자신이 이미 쓴 여러 가지의 (수십)를 전문 데이터 마이닝 스크레이퍼. ( '오픈 데이터'철학을 좋아하기 때문에).

여기에 다른 답변에 대한 많은 조언 이 있습니다. 이제 악마의 옹호자 역할을 수행 하고 그 효과를 확장 및 / 또는 수정합니다.

먼저:

  • 누군가 정말로 데이터를 원한다면
  • 당신은 할 수없는 효과 (기술적으로) 데이터를 숨기기
  • "일반 사용자" 가 데이터에 공개적으로 액세스 할 수 있어야 하는 경우

일부 기술적 장벽을 사용하려고하면 문제가 발생하지 않습니다.

  • 사용자 경험을 악화시켜 일반 사용자에게
  • 정기적이고 환영받는 봇 (검색 엔진)
  • 기타...

Plain HMTL- 가장 쉬운 방법은 잘 정의 된 구조와 CSS 클래스로 일반 HTML 페이지를 구문 분석하는 것입니다. 예를 들어 Firebug로 요소를 검사하고 내 스크레이퍼에서 올바른 Xpath 및 / 또는 CSS 경로를 사용하면 충분합니다.

HTML 구조를 동적으로 생성 할 수도 있고 CSS 클래스 이름 (및 CSS 자체도)을 동적으로 생성 할 수도 있습니다 (예 : 임의의 클래스 이름 사용).

  • 일관된 방식으로 일반 사용자에게 정보를 제공하려는 경우
  • 예를 들어 다시-스크레이퍼를 설정하기 위해 페이지 구조를 한 번 더 분석하면 충분합니다.
  • "이미 알려진 컨텐츠"를 분석하여 자동으로 수행 할 수 있습니다.
    • 누군가 이미 알고 있다면 (이전 스크랩으로), 예 :
    • "phil collins"에 대한 정보가 포함되어 있습니다.
    • "phil collins"페이지를 충분히 표시하고 페이지가 "오늘"구성되는 방식을 자동으로 분석하십시오. :)

일반 사용자가 당신을 미워하기 때문에 모든 응답의 구조를 변경할 수 없습니다. 또한 이로 인해 스크레이퍼가 아닌 더 많은 문제가 발생할 수 있습니다 (유지 보수). XPath 또는 CSS 경로는 알려진 내용에서 자동으로 스크래핑 스크립트로 확인할 수 있습니다.

Ajax- 처음에는 조금 어려웠지만 여러 번 스크랩 프로세스 속도가 빨라졌습니다. :)-왜?

요청과 응답을 분석 할 때 방금 프록시 서버 (perl로 작성)를 설정하고 파이어 폭스가 사용하고 있습니다. 물론, 그것은 내 자신의 프록시이기 때문에-완전히 숨겨져 있습니다-대상 서버는 일반 브라우저로 봅니다. (따라서 X-Forwarded-for 및 해당 헤더는 없습니다). 프록시 로그를 기반으로, 대부분의 아약스 요청의 "논리적"을 결정할 수 있습니다. 예를 들어, 대부분의 html 스크래핑을 건너 뛰고 잘 구성된 아약스 응답 (대부분 JSON 형식)을 사용할 수 있습니다.

따라서 아약스 는별로 도움이되지 않습니다 ...

더 복잡 일부는 사용합니다 페이지입니다 많은 자바 스크립트 기능을 포장 .

두 가지 기본 방법을 사용할 수 있습니다.

  • JS의 압축을 풀고 이해하고 Javascript 논리를 따르는 스크레이퍼를 작성하십시오 (어려운 방법).
  • 또는 (바람직하게는 직접 사용하십시오)- 모짜 레프 와 함께 모질라를 사용하여 긁어 내기 만하면 됩니다. 예를 들어, 실제 스크래핑은 완전한 기능을 갖춘 자바 스크립트 가능 브라우저에서 수행됩니다.이 브라우저는 올바른 요소를 클릭하고 브라우저 창에서 직접 "디코딩 된"응답을 가져 오도록 프로그램되어 있습니다.

스크래핑은 느리지 만 (일반 브라우저에서와 같이 스크래핑이 수행됨)

  • 설치 및 사용이 매우 쉽습니다.
  • 그리고 그것을 반박하는 것은 거의 불가능합니다 :)
  • "느린 성"은 어쨌든 "빠른 동일한 IP 기반 요청 차단"에 대응하기 위해 필요합니다

사용자 에이전트 기반 필터링은 전혀 도움이되지 않습니다. 심각한 데이터 마이너는 스크레이퍼에서 올바른 데이터 마이너로 설정합니다.

로그인 필요 -도움이되지 않습니다. 가장 간단한 방법은 (로그인 프로토콜을 분석하거나 스크립팅하지 않고) Mozilla를 사용하여 Mozrepl 기반 스크레이퍼를 실행 한 후 일반 사용자로 사이트에 로그인하는 것입니다 ...

(가), 기억 로그인이 필요 익명 봇을 위해 도움이되지만 데이터를 긁어 원하는 사람에 도움이되지 않습니다. 그는 단지 자신의 사이트에 일반 사용자로 등록합니다.

프레임을 사용하는 것도 효과적이지 않습니다. 이것은 많은 라이브 영화 서비스에서 사용되며 이길 수는 없습니다. 프레임은 단순히 분석에 필요한 HTML / Javascript 페이지 중 하나입니다. 문제가있는 데이터가있는 경우 데이터 마이너가 필요한 분석을 수행합니다.

IP 기반 제한 은 전혀 효과적이지 않습니다. 여기에는 공용 프록시 서버가 너무 많고 여기에도 TOR가 있습니다. :) 스크래핑 속도를 늦추지 않습니다 ( 실제로 데이터를 원하는 사람에게 ).

이미지에 숨겨진 데이터 긁기가 매우 어렵습니다. (예를 들어 단순히 데이터를 서버 측 이미지로 변환). "tesseract"(OCR)를 사용하면 스크레이퍼의 문제를 해결할 가치가있는 데이터가 여러 번 도움이됩니다. (여러 번 가치가 없습니다).

다른 한편으로, 사용자는 이것을 싫어합니다. 나 자신은 (스크래핑하지 않더라도) 페이지 내용을 클립 보드에 복사 할 수없는 웹 사이트를 싫어합니다 (정보가 이미지에 있거나 (어리석은 것들)) 일부 사용자 정의 Javascript 이벤트를 마우스 오른쪽 버튼으로 클릭하려고합니다. : )

가장 어려운 것은 Java 애플릿이나 플래시 를 사용하는 사이트이며 애플릿 은 내부적으로 보안 https 요청을 사용합니다 . 그러나 두 번 생각하십시오-iPhone 사용자가 얼마나 행복할까요 ...;). 따라서 현재이를 사용하는 사이트는 거의 없습니다. 내 브라우저에서 정기적 인 탐색 세션으로 모든 플래시 컨텐츠를 차단하고 Flash에 의존하는 사이트는 사용하지 마십시오.

이정표는 다음과 같습니다. 따라서이 방법을 시도해보십시오. 기억하십시오. 아마도 일부 사용자를 잃게 될 것입니다. 또한 일부 SWF 파일은 컴파일 할 수 있습니다. ;)

Captcha (reCaptcha와 같은 좋은 것)는 많은 도움이되지만 사용자는 당신을 미워할 것입니다 ... 음악 아티스트에 대한 정보를 보여주는 모든 페이지에서 일부 보안 문자를 해결해야 할 때 사용자가 어떻게 당신을 사랑할 것인지 상상하십시오.

아마도 계속할 필요가 없습니다. 이미 그림에 들어갔습니다.

이제해야 할 일 :

기억하십시오 : 다른 쪽에서 일반 사용자에게 데이터를 친숙하게 게시하려면 데이터를 숨기는 것이 거의 불가능합니다.

그래서,

  • 일부 API를 통해 데이터에 쉽게 액세스 가능
    • 이것은 쉬운 데이터 액세스를 허용합니다
    • 예 : 스크래핑으로 서버를 오프로드합니다.
  • 올바른 사용 권한을 설정하십시오 (예 : 소스를 인용해야 함)
  • 많은 데이터는 저작권이 없으며 보호하기가 어렵습니다.
  • 가짜 데이터를 추가하고 (이미 수행 한대로) 법률 도구 사용
    • 다른 사람들이 이미 말했듯이, "휴가와 희망 편지"를 보내십시오
    • 다른 법적 조치 (고소 등)는 아마도 너무 비싸고 승리하기 어려울 수 있습니다 (특히 미국 이외의 사이트에 대해서는)

기술적 장벽을 사용하기 전에 두 번 생각하십시오.

데이터 마이너를 차단하는 대신 웹 사이트 유용성에 더 많은 노력을 추가하십시오. 당신의 사용자는 당신을 사랑합니다. 기술 장벽에 투자 한 시간 (& 에너지)은 일반적으로 가치가 없습니다. 더 나은 웹 사이트를 만들기 위해 시간을 보내는 것이 좋습니다.

또한 데이터 도둑은 일반 도둑과 다릅니다.

저렴한 주택 경보를 구입하고 "이 집은 경찰과 연결되어 있습니다"라는 경고를 추가하면 많은 도둑이 침입하지 않을 것입니다. 한 사람이 잘못 움직여서 감옥에 갔기 때문에 ...

따라서 당신은 적은 돈만 투자하지만 도둑은 많은 투자와 위험을 감수합니다.

그러나 데이터 도둑은 그런 위험이 없습니다. 그 반대의 경우-한 번 잘못 움직이면 (예 : 기술적 인 장벽으로 인해 버그가 생길 경우) 사용자가 느슨해집니다. 스크래핑 봇이 처음으로 작동하지 않으면 아무 일도 일어나지 않습니다. 데이터 마이너는 다른 접근법을 시도하거나 스크립트를 디버깅합니다.

이 경우 훨씬 더 많은 투자가 필요하고 스크레이퍼는 훨씬 적게 투자해야합니다.

시간과 에너지를 어디에 투자하고 싶은지 생각해보십시오.

추신 : 영어는 내 모국어가 아니므로 깨진 영어를 용서하십시오 ...


@Parapluie 무료 컨텐츠 및 / 또는 오픈 소스 모델 , 날짜, 역사, 목표 및 윤리에 대해 읽어야합니다 . 특히 대부분의 스크레이퍼를 생성 한 Open Data 에 대해 ...
jm666

나는 당신의에 루다이 트 추천에 감사하지만 개념을 이해합니다. 우리는 그것에 대해 흥미로운 대화를 나 might을 것입니다. 하지만 제 원래의 의견은 제 3자가 삭제 한 것 같습니다. 그리고 결국 우리는 정말 자유롭습니까?
Parapluie

8

기술적 인 관점에서 : 한 번에 너무 많은 쿼리로 조회 할 때 Google이하는 일을 모델링하십시오. 그것은 많은 것을 중단해야합니다.

법적 관점에서 : 게시하는 데이터가 독점적이지 않은 것 같습니다. 저작권이없는 이름과 통계 및 기타 정보를 게시한다는 의미입니다.

이 경우 스크레이퍼는 아티스트 이름 등에 대한 정보를 재배포하여 저작권을 위반하지 않습니다. 그러나 사이트에는 레이아웃 등의 저작권이있는 요소가 포함되어있어 사이트를 메모리에로드 할 때 저작권을 위반할 수 있습니다.

Facebook v. Power.com에 대한 내용을 읽고 Facebook에서 화면 스크래핑을 중지하는 데 사용한 인수를 확인하는 것이 좋습니다. 다른 사람이 귀하의 웹 사이트를 긁는 것을 막으려 고 시도 할 수있는 많은 법적 방법이 있습니다. 그들은 멀리 도달하고 상상력이 있습니다. 때때로 법원은 논쟁을합니다. 때로는 그렇지 않습니다.

그러나 이름이나 기본 통계와 같이 저작권이없는 퍼블릭 도메인 정보를 게시한다고 가정하면 자유 언론과 공개 데이터의 이름으로 보내야합니다. 즉, 웹의 모든 것입니다.


1
정보를 저작권으로 보호하지 못할 수도 있지만 사용 약관에 긁힘 방지 조항을 명시 할 수 있습니다. 그런 다음 이용 약관 위반에 대한 중단 및 희망 서한을 보내십시오.
André Caron

1
자유로운 연설과 열린 데이터는 실제로 인터넷의 정신입니다!
Ciara

예, 언론의 자유와 그 모든 것. 그러나 스크레이퍼는 저작권이없는 데이터를 복사하는 것뿐만 아니라 상당량의 OP 예산이나 낭비로 낭비 될 수 있습니다.
jpaugh

8

초보자 스크레이퍼에 효과적 일 수있는 것 :

  • IP 차단
  • 많은 아약스를 사용
  • 리퍼러 요청 헤더 확인
  • 로그인이 필요합니다

일반적으로 도움이되는 것들 :

  • 매주 레이아웃 변경
  • robots.txt

도움이되지만 사용자가 당신을 미워하게 만드는 것들 :

  • 보안 문자

8

나는 많은 웹 스크래핑을 수행했으며 성가신 것을 발견하여 블로그에서 웹 스크레이퍼를 중지시키는 기술을 요약했습니다 .

사용자와 스크레이퍼 사이의 균형입니다. IP를 제한하고 보안 문자를 사용하고 로그인을 요구하는 등의 경우 스크레이퍼가 어려워집니다. 그러나 이로 인해 실제 사용자가 멀어 질 수도 있습니다.


8

가장 좋은 방법은 불행히도 수동적 인 방법입니다. 스크래핑을 나타내는 트래픽 패턴을 찾아 IP 주소를 차단하십시오.

공개 사이트에 대해 이야기하고 있기 때문에 검색 엔진 친화적 인 사이트를 만들면 사이트를 스크랩하기도 쉽습니다. 검색 엔진이 사이트를 크롤링하고 긁을 수있는 경우 악의적 인 스크레이퍼도 가능합니다. 걷기 좋은 선입니다.


4
IP 차단은 스크레이퍼 속도를 늦추지 만 서버에 많은 작업을합니다. 1000 개의 프록시로 긁어 냈지만 여전히 원하는 데이터를 얻었으며 이제 방화벽이 엉망입니다.
pguardiario

1
그렇게하면 수평으로 이동합니다. 100000 개 주소는 오늘 그들을 위해 아무것도 비용 없지만 사이트 속도가 느려집니다 당신은 그들 모두를 금지하려고하면 - 그리고 그들은 더 두 번이나 이상 방문 할 수있는 IP를 회전합니다
mplungjan

6

물론 가능합니다. 100 % 성공을 거두려면 사이트를 오프라인으로 만드십시오.

실제로 당신이 할 수있는 몇 가지 좀 더 어렵게된다고 만든다 것을. Google은 검색 결과를 긁어 모으는 로봇이 아닌지 확인하기 위해 브라우저 검사를 수행합니다.

사이트에 대한 첫 번째 연결과 후속 클릭 사이에 몇 초가 소요될 수 있습니다. 이상적인 시간이 무엇인지 또는 정확히 수행하는 방법을 모르겠지만 다른 아이디어입니다.

더 많은 경험을 가진 다른 사람들이 몇 명 있다고 확신하지만 그 아이디어가 적어도 도움이되기를 바랍니다.


6

화면 스크래핑을 시도하고 방지하기 위해 할 수있는 몇 가지가 있습니다. 일부는 그다지 효과적이지 않지만 다른 것 (CAPTCHA)은 유용하지만 사용성을 방해합니다. 검색 엔진 색인과 같은 합법적 인 사이트 스크레이퍼를 방해 할 수 있다는 점도 명심해야합니다.

그러나 스크랩을 원하지 않으면 검색 엔진이 색인을 생성하지 않기를 원한다고 가정합니다.

시도해 볼 수있는 몇 가지 사항은 다음과 같습니다.

  • 이미지에 텍스트를 표시하십시오. 이것은 매우 신뢰할 만하고 보안 문자보다 사용자에게 고통을 덜 주지만 잘라서 붙여 넣을 수 없으며 예쁘게 확장하거나 액세스 할 수 없다는 것을 의미합니다.
  • 보안 문자를 사용하여 페이지를 반환하기 전에 완료해야합니다. 이것은 신뢰할 수있는 방법이지만 사용자에게 가장 큰 고통입니다.
  • 페이지를보기 전에 사용자가 계정에 가입하도록 요구하고 이메일 주소를 확인하십시오. 이것은 매우 효과적이지만 완전히 그렇지는 않을 것입니다. 스크린 스크레이퍼가 계정을 설정하고 로그인하도록 스크립트를 영리하게 프로그래밍 할 수 있습니다.
  • 클라이언트의 사용자 에이전트 문자열이 비어 있으면 액세스를 차단하십시오. 사이트 스크래핑 스크립트는 종종 느리게 프로그래밍되어 사용자 에이전트 문자열을 설정하지 않지만 모든 웹 브라우저는 그렇지 않습니다.
  • 알려진 화면 스크레이퍼 사용자 에이전트 문자열의 블랙리스트를 발견 할 수 있습니다. 다시, 이것은 게으르게 코딩 된 것들에만 도움이 될 것이다. 자신이하는 일을 아는 프로그래머는 웹 브라우저를 가장하도록 사용자 에이전트 문자열을 설정할 수 있습니다.
  • URL 경로를 자주 변경하십시오. 변경하면 이전 사용자가 계속 작동하지만 한 명의 사용자가 브라우저를 열었을 때만 작동하십시오. 새 URL 경로를 예측하기 어렵게 만드십시오. 이로 인해 URL이 하드 코딩 된 경우 스크립트가이를 파악하기 어렵습니다. 일종의 스크립트를 사용하여이 작업을 수행하는 것이 가장 좋습니다.

이 작업을 수행해야한다면 합법적 인 사용자에게 불편을 최소화하기 때문에 마지막 세 가지 조합을 사용했을 것입니다. 그러나이 방법으로 모든 사람을 차단할 수는 없다는 사실을 인정해야합니다. 그런 다음 IP 주소를 발견했을 때 IP 주소를 차단하려고 할 수 있습니다.


6
  1. 아니요, (어쨌든) 중지 할 수 없습니다
  2. 받아들이십시오. RDFa로 게시하고 슈퍼 검색 엔진 친화적이되어 데이터 재사용을 장려하지 않겠습니까? 사람들은 감사의 말을 전하고 크레딧을 제공합니다 (musicbrainz 참조).

아마 당신이 원하는 대답은 아니지만, 공개하려는 것을 숨기는 이유는 무엇입니까?


5

방법 1 (소규모 사이트에만 해당) :
암호화 / 인코딩 된 데이터를 제공합니다.
파이썬 (urllib, requests, beautifulSoup 등)을 사용하여 웹을 검색하고 암호화 방법이 없기 때문에 프로그래밍 언어로 해독 할 수없는 암호화 / 인코딩 된 데이터를 제공하는 많은 웹 사이트를 발견했습니다.

나는 PHP 웹 사이트에서 출력을 암호화하고 최소화하여 이것을 달성했습니다 (경고 : 이것은 큰 사이트에는 좋지 않습니다) 응답은 항상 혼란스러운 내용이었습니다.

PHP에서 출력을 최소화하는 예 ( PHP 페이지 html 출력 을 최소화 하는 방법? ) :

<?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");
?>

방법 2 :
당신이 그들을 막을 수 없다면 그것들을 속여서 쓸모없고 쓸모없는 데이터를 제공합니다.

방법 3 :
일반적인 스크래핑 사용자 에이전트 차단 : 주요 / 대규모 웹 사이트에서 사용자 에이전트로 "python3.4"로 스크 레이 핑하는 것이 불가능하므로이를 확인할 수 있습니다.

방법 4 :
모든 사용자 헤더가 유효한지 확인하십시오 . 스크레이퍼가 실제 사용자처럼 보이도록 가능한 많은 헤더를 제공하는 경우도 있습니다. 일부는 en-FU와 같이 사실이 아니거나 유효하지 않습니다.
다음은 내가 일반적으로 제공하는 일부 헤더 목록입니다.

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

봇을 블랙리스트에 올리는 것이 아니라 화이트리스트에 올리는 것이 좋습니다. 상위 몇 엔진에 대한 검색 결과를 종료하지 않으려면 일반적으로 잘 알려진 사용자 에이전트 문자열을 허용 목록에 추가 할 수 있습니다. 덜 윤리적 인 봇은 널리 사용되는 웹 브라우저의 사용자 에이전트 문자열을 위조하는 경향이 있습니다. 상위 검색 엔진은 트래픽의 95 % 이상을 차지해야합니다.

봇 자체를 식별하는 것은 다른 포스터가 제안한 기술을 사용하여 매우 간단해야합니다.


2

이에 대한 빠른 접근 방법은 부비 / 봇 트랩을 설정하는 것입니다.

  1. 일정 시간 동안 열거 나 전혀 열지 않으면 IP 및 기타 정보와 같은 특정 정보를 수집하는 페이지를 만드십시오 (불규칙 또는 패턴을 고려할 수도 있지만이 페이지를 전혀 열지 않아도 됨).

  2. CSS display로 숨겨져있는 페이지에서이 링크를 만드십시오 : none; 또는 왼쪽 : -9999px; 양전자 : 절대; 봇이 페이지의 특정 부분을 잊어 버릴 수 있기 때문에 바닥 글이 아닌 콘텐츠가 떨어지는 위치와 같이 무시할 가능성이 적은 곳에 배치하십시오.

  3. robots.txt 파일에서 정보를 수집하고이 페이지를 그 중 하나로 설정하기 위해 친근한 봇 (LOL, 행복한 얼굴이있는 것처럼!)을 원하지 않는 페이지에 대해 전체 허용 안함 규칙을 설정하십시오.

  4. 이제 친한 봇이 나오면 해당 페이지를 무시해야합니다. 그렇지만 여전히 충분하지 않습니다. 다른 페이지를 몇 개 더 만들거나 다른 방법으로 페이지를 다시 라우팅하여 다른 이름을 사용하십시오. 그런 다음 무시하려는 페이지와 함께 robots.txt 파일의 트랩 페이지에 더 많은 허용하지 않는 규칙을 추가하십시오.

  5. 이 봇 또는이 페이지에 들어온 사람의 IP를 수집하고 금지하지 말고 임의의 숫자, 저작권 표시, 특정 텍스트 문자열, 무서운 그림 표시 등 기본적으로 콘텐츠를 표시하는 기능 좋은 내용. 또한로드하는 데 시간이 오래 걸리는 페이지를 가리키는 링크를 설정할 수도 있습니다. PHP에서는 sleep () 함수를 사용할 수 있습니다. 잘 작성된 봇이 한 번에 X 개의 링크를 처리하도록 설정되어 있기 때문에 너무 오래 걸리는 페이지를 우회하는 감지 기능이 있으면 크롤러와 싸우게됩니다.

  6. 특정 텍스트 문자열 / 문장을 작성하여 자주 사용하는 검색 엔진으로 이동하여 검색하지 않는 경우 콘텐츠가 끝나는 위치를 표시 할 수 있습니다.

어쨌든 전술적으로나 창의적으로 생각하면 좋은 출발점이 될 수 있습니다. 가장 좋은 방법은 봇의 작동 방식을 배우는 것입니다.

또한 일부 ID를 사기하거나 페이지 요소의 속성이 표시되는 방식에 대해 생각합니다.

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

일부 봇이 페이지 또는 대상 요소에서 특정 패턴을 찾도록 설정 될 때마다 형식이 변경됩니다.

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

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

1
당신은 단지 그들을 금지하고 싶지 않아, 당신은 그들과 완전히 나사 싶어 ... 내가 그것을 사랑 해요!
Zoidberg

스텔스 금지는 내가 생각한 것과 정확히 같습니다 (일명 그림자 금지, 지옥 금지).
ErikE

1

일반적인 화면 스크래핑을 중지 할 수 없습니다. 더 나은지 나쁜지는 웹의 본질입니다.

등록 된 사용자로 로그인하지 않은 경우 아무도 음악 파일을 포함한 특정 항목에 액세스 할 수 없도록 만들 수 있습니다 . Apache 에서는 그렇게 어렵지 않습니다 . IIS에서도 그렇게 어렵지 않을 것이라고 생각합니다.


1

한 가지 방법은 컨텐츠를 XML 속성, URL 인코딩 문자열, HTML 인코딩 JSON으로 사전 형식화 된 텍스트 또는 데이터 URI로 제공 한 다음 클라이언트에서 HTML로 변환하는 것입니다. 이를 수행하는 몇 가지 사이트는 다음과 같습니다.

  • 꼬치 : 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; 
    />
  • 크롬 웹 스토어 : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Bing 뉴스 : 데이터 URL

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • 프로토 타입 : URL 인코딩 문자열

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : HTML 엔티티 + 사전 형식화 된 JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • 아마존 : 게으른 로딩

    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 + 사용자 정의 MIME 유형 + 사용자 정의 파일 확장자

       <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>

위의 소스 중 하나에서 소스를 보면 스크래핑으로 인해 메타 데이터와 탐색이 반환되는 것을 볼 수 있습니다.


내용이 균일 한 형식이므로 스크래핑이 훨씬 쉬워집니다. 실제로는 더 이상 스크래핑 이라고 하지 않습니다. 파싱 이라고하며 프로그래밍 방식으로 수행하는 것이 매우 쉽습니다.
jpaugh

1

대부분 이미 언급되었지만 CloudFlare 보호를 고려 했습니까? 나는 이것을 의미한다 :

이미지 설명

다른 회사들도 아마 이것을 할 것입니다. CloudFlare는 내가 아는 유일한 회사입니다.

나는 그것이 그들의 작업을 복잡하게 할 것이라고 확신합니다. 또한 속도 제한으로 인해 CloudFlare로 보호되는 사이트의 데이터를 스크랩하려고 시도했을 때 4 개월 동안 IP가 자동으로 금지되었습니다 (단순한 AJAX 요청 루프를 사용했습니다).


1

위의 게시물 대부분에 동의하며 귀하의 사이트가 더 친숙한 검색 엔진 일수록 더 긁힐 수 있다고 덧붙이고 싶습니다. 스크레이퍼를 어렵게 만드는 몇 가지 작업을 시도해 볼 수도 있지만 검색 가능성에도 영향을 줄 수 있습니다. 물론 검색 엔진에서 사이트의 순위를 얼마나 매끄럽게 원하는지에 따라 다릅니다.


0

콘텐츠를 보안 문자 뒤에두면 로봇이 콘텐츠에 액세스하기가 어렵다는 것을 의미합니다. 그러나 인간은 불편하여 바람직하지 않을 수 있습니다.


0

좋은 예를 보려면 http://www.bkstr.com/을 확인 하십시오 . 이들은 aj / s 알고리즘을 사용하여 쿠키를 설정 한 다음 쿠키를 사용하여 요청이 브라우저 내에서 실행되고 있는지 확인할 수 있도록 페이지를 다시로드합니다. 긁어 모으기 위해 만들어진 데스크탑 앱은 분명히 이것에 의해 얻을 수 있지만 대부분의 cURL 유형 긁기를 막을 수 있습니다.


0

스크린 스크레이퍼는 HTML을 처리하여 작동합니다. 그리고 그들이 데이터를 얻기로 결정했다면 인간의 안구가 무엇이든 처리하기 때문에 기술적으로 할 수있는 일은 많지 않습니다. 법적으로 그것은 이미 당신이 약간의 상환을받을 수 있다고 지적되었으며 그것은 나의 추천이 될 것입니다.

그러나 HTML 기반이 아닌 프리젠 테이션 로직을 사용하여 데이터의 중요한 부분을 숨길 수 있습니다

  • 아티스트 / 앨범 등을위한 Flash 파일 생성
  • 각 아티스트 컨텐츠에 대한 이미지를 생성하십시오. 예술가 이름 등의 이미지로 충분할 수 있습니다. 텍스트를 서버 의 JPEG / PNG 파일 로 렌더링하고 해당 이미지에 연결하면됩니다.

검색 순위에 영향을 줄 수 있습니다.


0

HTML, CSS 및 JavaScript를 생성하십시오. 파서보다 생성기를 작성하는 것이 더 쉬우므로 제공된 각 페이지를 다르게 생성 할 수 있습니다. 더 이상 캐시 또는 정적 컨텐츠를 사용할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.