웹페이지 크롤링 목적으로 만든 소스가 디도스로 오인될 수 있다면..

koreaccm의 이미지


안녕하세요,

회사의 업무 효율을 높이지고 웹페이지 크롤링하는 코드(Python)를 짜봤습니다.
예를 들면 네이버 특정 페이지에 수천개의 쿼리를 입력하고 판단하는 일입니다.
문제는 이 코드가 아무리 interval term 을 주더라도
웹사이트에서 d-dos로 인식될 염려가 있다는 것입니다.

그리고 아주 초보수준으로 만든 코드(Python)다 보니
검색엔진에서 의미하는 제대로 된 크롤러라고도 볼 수 없구요.
D-dos로 오인될 수 있다는 이 문제를 어떻게 돌파할 수 있을까요?
어떤 열린 답변이라도 부탁드립니다.
사실 처음 만들어봤던 프로그램인데 이런 벽에 막히고
다음의 방향성을 잃어버리니 한동안 손을 놓고 있었습니다.

'막연히 검색엔진에 대해서 공부하면 될까?' 하는 생각뿐이네요.
(소스 공개는 너무 기초 수준이라 별 의미가 없을 것 같아서 하지 않을게요 ㅜ)

koreaccm의 이미지

와이파이라 느려서 버튼을 두 번 눌렸더니 연속 2개가 .... 죄송합니다. (_ _)

익명 사용자의 이미지

크롤링 하고자 하는 사이트의 robots.txt를 일단 준수하세요.

예를 들면 http://kldp.org/robots.txt 같은거 말이죠...

snowall의 이미지

네이버의 API약관이나 사용약관이 있을텐데 거기에 뭔가 적혀있을 것 같네요. 아니면 네이버 고객센터에 문의하시는게 정확하고 빠를겁니다.

업무 효율이 많이 좋아진다면 네이버에 돈 내고 쓰시면 될 것 같은데요.

피할 수 있을때 즐겨라! http://melotopia.net/b

hothead의 이미지

일단 robots.txt를 준수하시는게 맞습니다.

그리고 하루에 crawl할 페이지 단위가 많이 크지 않으면 좋을 것 같은데

관련 논문을 먼저 찾아보시는게 좋을 것 같네요 : )

그리고 DDOS Block 솔루션들이 어떠한 원리로 ip를 filtering하고 block하는지 찾아보시는게 좋겠네요 : )

방문해야 하는 페이지 수를 한정한 뒤에 그 페이지만 방문하는 서버들을 여러대로 나누어서 작업하는게 ip block 조건을 완화 하는데 도움이 될 것 같아요.
(예를 들면 다른 IP 대역 컴퓨터를 Round Robin으로 돌리면 interval 을 줄일 수 있겠죠)

그리고 crawl은 동적 페이지나 환경 link와 같은 경우 무한 loop을 돌 수 있기 때문에 a tag에 걸려있는 link는 보통 3 depth까지 들어갑니다.

그리고 이미 방문한 페이지를 다시 방문하지 않도록 이미 방문한 목록 데이터를 가지고 있으며 방문 주기도 결정하게 되겠죠.

crawl을 한다 쳐도 특정 페이지에 있는 특정 패턴의 컨텐츠를 긁어올 것인지에 따라 crawler 로직이 조금씩 다를 것이고요

긁어온 페이지를 검색엔진에 어떻게 노출할 것이며 어디까지 보여줄 것인지는 indexer에 등록하는 정책마다 다를 것입니다.

그리고 긁어온 페이지를 indexer에 등록하면서 어떤 tag나 keyword를 검색에서 노출하게 할 것인지(stemming)는 또 다른분야고요..

막연히 crawler를 만들기 보다는 기존에 나와있는 검색 이론 관련 서적을 먼저 공부하시고 배경 지식을 탄탄히 하시는게 좋을 것 같습니다.

검색은 crawler 말고도 해야 할 게 너무나 많아요 ㅎㅅㅎ

koreaccm의 이미지

이렇게 답답한 질문에도 불구하고
좋은 답변들 주셔서 감사드립니다.

이번에도 좋은 배움의 방향을 얻은 것 같습니다.
감사합니다. 여러분.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.