큰 아티스트 데이터베이스가있는 상당히 큰 음악 웹 사이트가 있습니다. 사이트의 데이터를 긁어내는 다른 음악 사이트에 주목했습니다 (여기저기서 아티스트 이름을 입력 한 다음 Google에서 검색합니다).
화면 스크래핑을 방지하려면 어떻게해야합니까? 가능합니까?
답변
참고 : 이 답변의 전체 버전이 스택 오버플로의 길이 제한을 초과 하므로 자세한 내용과 함께 확장 버전을 읽으 려면 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를 실행하는 스크린 스크래퍼에 효과적입니다.
보안 스택 교환에 대한 관련 질문 :
-
IP 주소가 자주 변경 될 때 사람들이 IP 주소 금지를 사용하는 이유는 무엇입니까? 이 방법의 한계에 대한 정보는
-
-
일시적으로 액세스를 차단하는 대신 보안 문자를 사용하십시오.
속도 제한을 구현하는 간단한 방법은 일정 시간 동안 액세스를 일시적으로 차단하는 것이지만 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-content
div 의 콘텐츠 텍스트를 추출하는 스크립트를 작성하는 것이 간단합니다. 스크래퍼는 각 기사 페이지에 있고, 사이트의 모든 기사는 다른 곳에서 재사용 할 수있는 형식으로되어 있습니다.
HTML과 페이지 구조를 자주 변경하면 이러한 스크레이퍼가 더 이상 작동하지 않습니다.
-
HTML에서 요소의 ID와 클래스를 자주, 심지어 자동으로 변경할 수도 있습니다. 따라서 귀하
div.article-content
가와 같이div.a4c36dda13eaf0
바뀌고 매주 변경되는 경우 스크레이퍼는 처음에는 정상적으로 작동하지만 일주일 후에 중단됩니다. ID / 클래스의 길이도 변경하십시오. 그렇지 않으면 스크레이퍼가div.[any-14-characters]
대신 원하는 div를 찾는 데 사용 합니다. 다른 유사한 구멍도 조심하십시오. -
마크 업에서 원하는 컨텐츠를 찾을 수있는 방법이 없으면 스크레이퍼는 HTML이 구성되는 방식에서 그렇게합니다. 따라서 모든 기사 페이지가
div
adiv
뒤에 나오는 모든h1
기사 내용이 기사 내용 이라는 점에서 비슷 하면 스크레이퍼는 기사 내용을 기반으로 기사 내용을 가져옵니다. 다시 말하지만, 이것을 깨기 위해 HTML에 마크 업을 주기적으로 그리고 무작위로 추가하거나 제거 할 수 있습니다. 여분div
의 s 또는span
s 추가 . 최신 서버 측 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 엔드 포인트를 결정할 수 있습니다.
-
스크레이퍼는 다른 스크레이퍼를 긁을 수 있습니다. 귀하의 웹 사이트에서 스크랩 한 내용이있는 웹 사이트가 하나있는 경우 다른 스크레이퍼는 해당 스크레이퍼의 웹 사이트에서 스크랩 할 수 있습니다.
더 읽을 거리 :
-
웹 스크랩 핑에 관한 Wikipedia의 기사 . 관련된 기술과 다양한 유형의 웹 스크레이퍼에 대한 자세한 내용.
-
스크립터가 초당 수백 번 웹 사이트를 때리는 것을 막습니다 . 매우 유사한 문제에 대한 Q & A-웹 사이트를 확인하고 판매되는 즉시 물건을 구입하는 봇. 많은 관련 정보, esp. 보안 문자 및 요율 제한에 대해
답변
나는 당신이 설정했다고 가정합니다 robots.txt
.
다른 사람들이 언급했듯이, 스크레이퍼는 활동의 거의 모든 측면을 위조 할 수 있으며 악의적 인 사용자의 요청을 식별하기가 매우 어려울 수 있습니다.
나는 고려할 것이다 :
- 페이지를 설정하십시오
/jail.html
. - 페이지에 대한 액세스를 허용
robots.txt
하지 않습니다. 따라서 존경스러운 거미는 절대 방문하지 않습니다. - CSS (
display: none
)로 숨기고 페이지 중 하나에 링크를 배치하십시오 . - 의 방문자 IP 주소를 기록하십시오
/jail.html
.
이를 통해을 무시하고 긁는 스크레이퍼의 요청을 빠르게 식별 할 수 있습니다 robots.txt
.
또한 확인 할 수 있습니다 /jail.html
가짜 데이터를 (일반 페이지와 같은, 정확한 마크 업이있는 전체 전체 웹 사이트를하지만 /jail/album/63ajdka
, /jail/track/3aads8
등). 이런 방식으로 불량 스크레이퍼는 완전히 차단할 수있을 때까지 “이상 입력”을 경고하지 않습니다.
답변
고소
진지하게 : 돈이 있다면, 인터넷에서 자신의 길을 알고있는 선량하고 멋진 젊은 변호사와 상담하십시오. 여기서 뭔가를 할 수있을 것입니다. 사이트의 위치에 따라 변호사가 귀하의 국가에서 중지 및 요구 또는 이와 동등한 것을 작성하도록 할 수 있습니다. 당신은 적어도 놈들을 놀라게 할 수 있습니다.
더미 값의 삽입을 문서화하십시오. 명확하게 (하지만 모호하게) 가리키는 더미 값을 삽입하십시오. 나는 이것이 전화 번호부 회사들과 일반적인 관행이라고 생각한다. 그리고 독일에서는, 모방범들이 1 : 1을 모방 한 가짜 항목을 통해 파열되었을 때 몇 가지 사례가 있다고 생각한다.
이 동일한 페이지에 대한 각 요청에 약간 다른 HTML 구조를 사용하는 템플릿 시스템은 이미 도움이 될 비록 SEO, 유효성과 다른 것들 (아래로 드래그, HTML 코드를 엉망으로 당신을 운전한다면 그것은 부끄러운 일 것이다 많은 대하여 콘텐츠를 가져 오기 위해 항상 HTML 구조와 클래스 / ID 이름을 사용하는 스크레이퍼
이와 같은 경우는 저작권법이 좋은 것입니다. 돈을 벌기 위해 다른 사람들의 정직한 일을 없애는 것은 당신이 싸울 수있는 것입니다.
답변
이것을 완전히 막기 위해 할 수있는 일은 없습니다. 스크레이퍼는 사용자 에이전트를 위조하거나 여러 IP 주소 등을 사용하여 일반 사용자로 표시 될 수 있습니다. 페이지를로드 할 때 텍스트를 사용할 수 없게 만드는 것은 이미지, 플래시 또는 JavaScript로로드하는 것뿐입니다. 그러나 처음 두 가지는 좋지 않은 아이디어이며, 마지막은 일부 일반 사용자가 JavaScript를 사용할 수없는 경우 접근성 문제입니다.
이들이 사이트를 완전히 훼손하고 모든 페이지를 훑어 보는 경우 일종의 속도 제한을 수행 할 수 있습니다.
그래도 희망이 있습니다. 스크레이퍼는 일관된 형식의 사이트 데이터를 사용합니다. 어떻게 든 무작위화할 수 있으면 스크레이퍼가 손상 될 수 있습니다. 로드 할 때마다 페이지 요소의 ID 또는 클래스 이름을 변경하는 것과 같은 것들. 그러나 그것은 많은 작업이며 가치가 있는지 확실하지 않습니다. 그럼에도 불구하고 그들은 충분한 헌신을 가지고 그 문제를 해결할 수있을 것입니다.
답변
데이터에 액세스 할 수있는 XML API를 제공하십시오. 사용하기 쉬운 방식으로. 사람들이 당신의 데이터를 원한다면 얻을 수 있습니다.
이렇게하면 최소한의 기능만으로도 스크래퍼가 HTTP 요청과 엄청난 양의 대역폭을 방해하지 않도록 기능의 하위 집합을 제공 할 수 있습니다.
그런 다음 데이터를 원하는 사람들에게 API를 사용하도록 설득하기 만하면됩니다. 😉
답변
죄송합니다.이 작업은 정말 어렵습니다.
콘텐츠를 저작권으로 보호하는 경우 콘텐츠를 사용하지 말라고 정중하게 요청하는 것이 좋습니다.
그것이 있고 그들이 그것을 삭제하지 않으면, 당신은 furthur 조치를 취하고 그들에게 중지하고 원하는 편지를 보낼 수 있습니다 .
일반적으로 스크래핑을 방지하기 위해 무엇을 하든지 접근성, 봇 / 스파이더 등과 같은 부정적인 영향이 발생할 수 있습니다.
답변
모든 게시물에서 알 수 있듯이 검색 엔진 친화적 인 검색을 원한다면 봇이 긁을 수 있습니다.
그러나 여전히 몇 가지 일을 할 수 있으며 60-70 % 긁는 로봇에 영향을 줄 수 있습니다.
아래처럼 체커 스크립트를 만드십시오.
특정 IP 주소가 매우 빠르게 방문하는 경우 몇 번의 방문 (5-10) 후 IP 주소와 브라우저 정보를 파일이나 데이터베이스에 넣습니다.
다음 단계
(이 과정은 백그라운드 프로세스이며 항상 실행되거나 몇 분 후에 예약됩니다.) 의심스러운 IP 주소를 계속 확인하는 다른 스크립트를 작성하십시오.
사례 1. 사용자 에이전트가 Google, Bing , Yahoo 와 같은 알려진 검색 엔진 인 경우 (구글링하여 사용자 에이전트에 대한 자세한 정보를 찾을 수 있습니다). 그러면 http://www.iplists.com/ 이 표시되어야합니다 . 이 목록과 패턴을 일치 시키십시오. 그리고 가짜 사용자 에이전트처럼 보이는 경우 다음 방문시 보안 문자 를 작성하도록 요청 하십시오. (봇 IP 주소에 대해 조금 더 연구해야합니다. 이것이 달성 가능하다는 것을 알고 IP 주소를 가진 사람도 시도해보십시오. 도움이 될 수 있습니다.)
사례 2. 검색 봇의 사용자 에이전트가 없음 : 다음 방문시 단순히 보안 문자를 작성하도록 요청하십시오.