๐Ÿญ '์›น ํฌ๋กค๋Ÿฌ' ์ข€ ๊ทธ๋งŒ ๋งŒ๋“ค์–ด๋ผ

mowinckelยท2020๋…„ 5์›” 1์ผ
57
post-thumbnail

๐Ÿšจ ์ฃผ์˜: ์ด ํฌ์ŠคํŠธ๋Š” ๋ฏผ๊ฐํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์š•์„ค์ด ๋“ฑ์žฅํ•˜๋ฏ€๋กœ ์ฃผ์˜ ํ•ด ์ฃผ์„ธ์š”.

๐Ÿคฌ ์ฃผ์˜ : ์š•์„ค ๋ ˆ๋ฒจ 2์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ๋‹ค์†Œ ๋ถˆ์พŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜  ๋ฌด์Šจ ๋ง ํ• ๊ฑฐ๋ƒ?

๊ฑฐ์ฐฝํ•œ ์ด์•ผ๊ธฐ๋Š” ์•„๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์— ์กด์žฌํ•˜๋Š” ์›น ํฌ๋กค๋Ÿฌ ๋˜๋Š” ์›น ํ”„๋ก ํ‹ฐ์–ด๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋Š” ๊ฒƒ๋“ค์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์ฝ๊ณ  ์ƒ๊ธด ๋‹ต๋‹ตํ•จ์„ ์ด๊ณณ์— ์กฐ๊ธˆ ํ„ธ์–ด ๋†“์œผ๋ ค๊ณ  ํ•œ๋‹ค.

์ธํ„ฐ๋„ท์— 'ํฌ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ'๋ฅผ ์ณค๋‹คํ•˜๋ฉด 90% ํ™•๋ฅ ๋กœ ํŒŒ์ด์ฌ์œผ๋กœ ํฌ๋กค๋Ÿฌ๋Š” ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž˜ ์“ฐ์—ฌ์ง„ ๋ธ”๋กœ๊ทธ๊ฐ€ ์ˆ˜์‹ญ๊ฐœ์”ฉ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ์šฐ์ˆ˜์ˆ˜ ๋–จ์–ด์ง€๊ณ  ๊ทธ ๋Œ€๋ถ€๋ถ„์ด Scrapy๋˜๋Š” ์…€๋ ˆ๋‹ˆ์›€, BeautifulSoup4 ๋“ฑ ์„ ์‚ฌ์šฉํ•ด์„œ ํŠน์ • ์›น ์‚ฌ์ดํŠธ์˜ ํŽ˜์ด์ง€๋ฅผ ๊ธ์–ด๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

๋Œ€๊ฒŒ '์–ด๋”” ์–ด๋”” ํŽ˜์ด์ง€๋ฅผ ๊ธ์–ด์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  Telegram ์•Œ๋ฆผ๊นŒ์ง€ ์—ฐ๋™ ํ•ด ๋ด…์‹œ๋‹ค!' ์ •๋„์ด๋‹ค.

๋‚˜๋Š” ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋จผ์ € ๋งํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ๋“ค์€ ์ „ํ˜€ ํฌ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ธ”๋กœ๊ทธ๋“ค์ด '๋‚˜๋งŒ์˜ ์›น ํฌ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ' ๋”ฐ์œ„์˜ ์ œ๋ชฉ์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ ์‹ฌ์ง€์–ด ์ฝ”๋“œ๋“ค์€ ์ฃ„๋‹ค ์„œ๋กœ ๋นผ๋‹ค ๋‹ฎ์•„ ํ‹€๋ฆฐ ์ฝ”๋“œ๋„ ์„œ๋กœ ๋ถ™์—ฌ ๋„ฃ์œผ๋ฉด์„œ ํฌ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ผ๊ณ  ๋…๋ คํ•˜๊ณ  ์žˆ๋‹ค.

์ผ๋‹จ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์  ๋‘ ๊ฐ€์ง€๋งŒ ๊ผฝ์•„ ๋ณด๊ฒ ๋‹ค.

๐Ÿค” ์›น ํŽ˜์ด์ง€ ๋ช‡ ๊ฐœ ๊ธ๋Š” ๊ฑธ 'ํฌ๋กค๋Ÿฌ'๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค.

์›น ํฌ๋กค๋Ÿฌ๋ฅผ ๋‹จ์ˆœํ•œ ์ธํ„ฐ๋„ท ์žฅ๋‚œ๊ฐ ์ •๋„๋กœ ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ๋‹ค. ๋‚˜๋งŒ์˜ ์ฝ”๋“œ๋กœ ๋‚˜๋งŒ์˜ ์•Œ๋ฆผ ๋กœ๋ด‡์„ ์ œ์ž‘ํ•˜๊ณ  ์†Œ๊ฐœํ•˜๋Š” ์ •๋„์— ๊ทธ์น˜๋Š” ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค์ด ๋„ˆ๋ฌด๋‚˜๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 'ํฌ๋กค๋Ÿฌ' ๋˜๋Š” '์›น ํ”„๋ก ํ‹ฐ์–ด'๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์€ ์˜ค๋žซ๋™์•ˆ ์—ฐ๊ตฌ๋œ ์ฃผ์ œ๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด www์˜ ์ˆ˜์ฒœ ์ˆ˜๋ฐฑ๋งŒ๊ฐœ์˜ ์›น ํŽ˜์ด์ง€๋“ค์„ ์ž˜ ์ˆ˜์ง‘ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด๋‹ค.

๋‚ด๊ฐ€ ์›น ์ปจํ…์ธ  ํฌ๋กค๋ง์œผ๋กœ ๋ฐ•์‚ฌ ํ•™์œ„๋ผ๋„ ๋ฐ›์€ ๊ฒƒ๋„ ์•„๋‹ˆ๋ผ ๊ฐํžˆ ๋งํ•˜๋Š” ๊ฐœ์ธ์— ๋ถˆ๊ณผํ•˜์ง€๋งŒ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๊ทธ์ € ๊ทธ๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ ๋‹นํžˆ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ ค๋‘๊ณ  ํฌ๋กค๋Ÿฌ๋ผ๊ณ  ์†Œ๊ฐœํ•˜๋Š” ํ–‰์œ„๋Š” ์ฐธ์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ตฌ๊ธ€์—์„œ ํฌ๋กค๋ง์„ ๊ฒ€์ƒ‰ ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ํฌ๋กค๋Ÿฌ์˜ ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋…์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‹ค.

ํฌ๋กค๋ง(crawling) ์ดํ•ด ๋ฐ ๊ธฐ๋ณธ, ํฌ๋กค๋ง(crawling) ์ด๋ž€?

  • Web์ƒ์— ์กด์žฌํ•˜๋Š” Contents๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ž‘์—… (ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ž๋™ํ™” ๊ฐ€๋Šฅ)
  • HTML ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ, HTML/CSS๋“ฑ์„ ํŒŒ์‹ฑํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ฒ•
  • Open API(Rest API)๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์— Open API๋ฅผ ํ˜ธ์ถœํ•ด์„œ, ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ค‘ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ฒ•
  • Selenium๋“ฑ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์กฐ์ž‘ํ•ด์„œ, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ฒ•

ํฌ๋กค๋Ÿฌ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ œ๋Œ€๋กœ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ๋งˆ์ง€๋ง‰ ๋‘ ๊ฐ€์ง€๋Š” ๋‹นํ˜น์Šค๋Ÿฌ์šด ์ˆ˜์ค€์ด๋‹ค. ํฌ๋กค๋ง์€ ๊ฒฐ์ฝ” Open API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. API๊ฐ€ ์—†์–ด์„œ ํฌ๋กค๋Ÿฌ๋ฅผ ๋ชป ๋งŒ๋“ ๋‹ค๋ฉด ๊ณผ์—ฐ SW ์—”์ง€๋‹ˆ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ์ •๋ง ํฌ๋กค๋Ÿฌ๋ž€ ์…€๋ ˆ๋‹ˆ์›€์ด๋ž‘ Open API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ผ๊ณ ?

๋˜ ํฌ๋กค๋Ÿฌ๋Š” '์…€๋ ˆ๋‹ˆ์›€์„ ์จ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ ํ•˜๋Š” ๊ฒƒ'์ด๋ผ๊ณ  ๋ณด๊ธฐ์—๋„ ์–ด๋ ต๋‹ค.์…€๋ ˆ๋‹ˆ์›€์ด ์—†์œผ๋ฉด ์–ด์ฉ” ๊ฑด๊ฐ€? API๊ฐ€ ์—†์œผ๋ฉด ์–ด์ฉ” ๊ฑด๊ฐ€? ๊ณง ๋ฐ”๋กœ BeautifulSoup4๋ฅผ ์‚ฌ์šฉํ•ด์„œ CSS ์…€๋ ‰ํŒ…์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค ๋†“์•„์„œ ์‹ค๋งํ–ˆ๋‹ค.

๋ธ”๋กœ๊ทธ์— ์†Œ๊ฐœ๋œ ํฌ๋กค๋Ÿฌ๋“ค์€ ๊ทธ๋ƒฅ 'ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋๋‚˜๋Š” http request ์ •๋„'์— ๋ถˆ๊ณผํ•˜๋‹ค. ๊ทธ ๋•Œ ๊ทธ ์ˆœ๊ฐ„์—๋งŒ ๋™์ž‘ํ•˜๊ณ  target ์›น ํŽ˜์ด์ง€์˜ DOM์ด ์กฐ๊ธˆ๋งŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํž˜์„ ๋ชป ์“ฐ๋Š” ๋ณ‘์‹  ์ฝ”๋“œ๋กœ ์ „๋ฝํ•˜๊ณ  ๋งˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋„ ๊ทธ๋Ÿด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด๊ณ  CSS selector๋ฅผ ๋ณต์‚ฌํ•˜๋ผ๊ณ  ์จ ๋†“๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํŠนํžˆ '๋„ค์ด๋ฒ„ ๋‰ด์Šค ํฌ๋กค๋ง' ๋˜๋Š” '๋‹ค์Œ ๋‰ด์Šค ํฌ๋กค๋ง' ๋“ฑ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ๋“ค์€ ๊ทธ ์ค‘ ์ตœ์•…์ด๋ฉฐ ๋„ค์ด๋ฒ„๋‚˜ ๋‹ค์Œ์˜ ํŽ˜์ด์ง€ ๊ตฌ์กฐ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ '์›น ํฌ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ 2020๋…„ ์ตœ์‹ ' ๋”ฐ์œ„์˜ ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์„ค์น˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ์ด๊ฒƒ์ด๋‹ค.

๐Ÿค” ๊ทธ๋Ÿผ CSS selector๋ฅผ ์•ˆ ์“ฐ๊ณ  ๋Œ€์ฒด ์˜ค๋˜์ผ€ ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์ฃ ?!!

๋ผ๊ณ  ์ƒ๊ฐ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ์ง€๊ธˆ ๋‹น์žฅ ๋Œ€๊ฐ€๋ฆฌ ๋ฐ•๊ณ  ๋Œ€ํ•™๊ต๋กœ๊ฐ€์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…์„ ๋‹ค์‹œ ๋“ฃ๊ณ  ์˜ค๊ธธ ๋ฐ”๋ž€๋‹ค. CSS selector๋Š” ๋Œ€์ถฉ ์ƒ๊ฐํ•ด๋„ ์ „ํ˜€ ์šฐ์•„ํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ๐Ÿ“Ž DOM based content extraction via text density ์ด ๋…ผ๋ฌธ์„ ์ถ”์ฒœํ•œ๋‹ค. go๋กœ ์ด๊ฑธ ๊ตฌํ˜„ํ•œ ๊ฒƒ๋„ ๊ณต์œ ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ˆ„๊ตฌ ์ฝ์œผ๋ผ๊ณ  ์“ด ์ฝ”๋“œ๋Š” ์•„๋‹ˆ๋ผ์„œ ๋”๋Ÿฝ๋‹ค. ํ•ด๋‹น ๋…ผ๋ฌธ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” github์—์„œ ๋งŽ์ด ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ '์›น ํฌ๋กค๋Ÿฌ'์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

์ผ๋‹จ Fetcher์™€ Parser, Frontier ์„ธ๊ฐ€์ง€๊ฐ€ ๋ณด์ธ๋‹ค. ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € Frontier๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด ์ข‹๋‹ค. ์ด ๋””์ง€๋ชฌ Frontier๊ฐ€ ๋จผ์ € ํƒ์ƒ‰ํ•  URL์„ Fetcher์—๊ฒŒ ๋„˜๊ฒจ ์ฃผ๋ฉด Fetcher๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์˜ html ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€์„œ Parser์—๊ฒŒ ๋„˜๊ฒจ ์ค€๋‹ค. Parser์—์„œ๋Š” ๋‹ค๋ฅธ ํ•˜์ดํผ๋งํฌ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋ณดํ†ต html์˜ aํƒœ๊ทธ๋‚˜ url๋กœ ๋ณด์ž„์ง ํ•˜๋Š” ๊ฒƒ๋“ค์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ฐพ์€ ์ด URL๋“ค์„ ๋‹ค์‹œ ๋˜ Fetcher๊ฐ€ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ ๋ฐฉ๋ฌธ ํ–ˆ๋˜ ๊ณณ์„ ๋˜ ๋ฐฉ๋ฌธ ํ•˜๋ฉด ๋ฌดํ•œ loop๊ฐ€ ๋˜๋ฏ€๋กœ Dup URL Elim์—์„œ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ URL๊ณผ ์ค‘๋ณต URL๋“ค์„ ์ œ๊ฑฐํ•œ ์ฑ„๋กœ ๋””์ง€๋ชฌ Frontier์—๊ฒŒ ์ „๋‹ฌ ํ•ด ์ค€๋‹ค.

์ž ๊น๋งŒ! ๊ตฌ๊ตฌ์ ˆ์ ˆํ•˜๊ฒŒ ์จ ๋†“๊ธด ํ–ˆ์ง€๋งŒ ์ด ๋ชจ๋“  ๊ณผ์ •์€ ์‚ฌ์‹ค ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐฐ์› ๋˜ DFS๋‚˜ BFS์™€ ์™„๋ฒฝํ•˜๊ฒŒ ๊ฐ™์€ ๊ณผ์ •์ด ์•„๋‹Œ๊ฐ€?. ๋” ์ด์ƒ ๋ฐฉ๋ฌธ ํŽ˜์ด์ง€๊ฐ€ ์—†์„ ๋•Œ ๊นŒ์ง€ URL์„ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทน๋‹จ์ ์œผ๋กœ ๋งํ•ด์„œ ํฌ๋กค๋Ÿฌ๋Š” ์›”๋“œ ์™€์ผ๋“œ ์›น, www์„ ๋Œ€์ƒ์œผ๋กœ DFS๋˜๋Š” BFS๋ฅผ ํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์›น ์„ธ์ƒ์€ ์›Œ๋‚™ ๋„“์–ด์„œ ํƒ์ƒ‰์„ ํ•˜๋Š” ๋„์ค‘์—๋„ ์ƒˆ๋กœ์šด URL์ด ์ƒ๊ธฐ๊ณ  ๋˜ ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ์ˆ˜์ • ๋œ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ ์–ด๋–ป๊ฒŒํ•˜๋ฉด ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ์„๊นŒ?๋ผ๋Š” ๊ณ ๋ฏผ ์—ญ์‹œ ํฌ๋กค๋Ÿฌ ์—ฐ๊ตฌ์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

โš ๏ธ 'Content Seen?' ์ด๋ผ๋Š” ๋ถ€๋ถ„์€ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ณ  ์ƒ๋žตํ–ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€์˜ '๋ณธ๋ฌธ ๋‚ด์šฉ'์ด ์ด๋ฏธ ์ „์— ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ณธ ๋‚ด์šฉ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. Doc FP's๋ผ๊ณ  ์ ํžŒ๊ฒƒ์€ Document Finger Prints๋ฅผ ์ค„์ธ ๊ฒƒ์ธ๋ฐ FP๋ž€ ์–ด๋–ค Document์˜ ๋‚ด์šฉ์„ ๊ตฌ๋ถ„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ Hash ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค. ์ด ๋ถ€๋ถ„๋„ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ์ด ์ •๋ง ๋งŽ๊ณ  ๋ฐฉ๋Œ€ํ•ด์„œ ์—ฌ๊ธฐ์„œ๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ”๋‹ค. FP๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์—ญ์‹œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ณ  FP๋กœ ์–ด๋–ป๊ฒŒ '์ค‘๋ณต ๋ฌธ์„œ'๋ฅผ ๊ฑธ๋Ÿฌ ๋‚ผ๊นŒ? ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ถ„์•ผ๋‹ค. ํ•œ๊ตญ์–ด๋กœ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๋Š” ๋งํฌ๋ฅผ ์•„๋ž˜์— ์ ์–ด ๋‘”๋‹ค. ์˜์–ด๋กœ ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด 'Near Duplicated Document Detection'๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ ํ•ด ๋ณด์ž.

๐Ÿ“Ž ๋ฌธ์„œ ๋‹จ์œ„๋กœ ์œ ์‚ฌ ์ค‘๋ณต์„ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹ค์ œ ์šด์˜ ๋˜๋Š” ํฌ๋กค๋Ÿฌ๋Š” DNS ์„œ๋ฒ„๊นŒ์ง€ ๋”ฐ๋กœ ๋‘๊ธฐ๋„ ํ•˜๊ธฐ์— ๊ทธ๋ฆผ ์ƒ DNS๋ผ๋Š” ๊ฒƒ๋„ ๋ณด์ด์ง€๋งŒ DNS๋Š” ๋˜ ํ•˜๋‚˜์˜ ํฐ ์ฃผ์ œ์ด๋ฏ€๋กœ ๋‹น์žฅ ์ด ๋ถ€๋ถ„๊นŒ์ง€ ๋จธ๋ฆฌ ์•„ํ”„๊ฒŒ ๋” ์ƒ๊ฐํ•˜์ง€๋Š” ๋ง์ž. ์‚ฌ์‹ค ๋‚˜๋„ ๋ชจ๋ฆ„ ์—Œใ…‹ใ…‹.

๋‚ด๊ฐ€ ๋ญ ํ˜ผ์ž ๋ง์ƒ์— ์‚ฌ๋กœ์žกํ˜€์„œ "์ด๊ฑด ์”จ๋ฐœ! ์˜ˆ์ˆ ์ ์ด์ง€ ์•Š์•„! ์ด๊ฑด ํฌ๋กค๋Ÿฌ๊ฐ€ ์•„๋ƒ!"๋ผ๊ณ  ์™ธ์น˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ 1999๋…„์— ์šฐ๋ฆฌ ๋ฉ‹์Ÿ์ด Marc Najork๋ผ๋Š” ์‚ฌ๋žŒ์ด ์–ด๋–ป๊ฒŒ ํ™•์žฅ์„ฑ ์žˆ๋Š” ์›น ํฌ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์œ ๋ช…ํ•œ ๋…ผ๋ฌธ์„ ์ถœ๊ฐ„ ํ–ˆ๋‹ค.

์ด ๋…ผ๋ฌธ์˜ ์„œ๋ก ์„ ๋ณด๋ฉด ์žฌ๋ฐŒ๋Š” ๋ง์ด ๋“ฑ์žฅ ํ•œ๋‹ค.

๐Ÿ“Ž Scalable Web crawlers are an important component of many Web services, but their design is not wellโ€documented in the literature
Mercator: A scalable, extensible Web crawler, 1999

"'ํ™•์žฅ์„ฑ ์žˆ๋Š” ์›น ํฌ๋กค๋Ÿฌ'๋Š” ์›น ์„œ๋น„์Šค์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์ธ๋ฐ ๊ทธ ํฌ๋กค๋Ÿฌ ๋””์ž์ธ์— ๋Œ€ํ•ด์„  ์ž˜ ์ •๋ฆฝ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค."

๊ทธ๋กœ๋ถ€ํ„ฐ 10๋…„ ๋’ค, Marc Najork๋Š” MS ์—ฐ๊ตฌ์†Œ์— ๋“ค์–ด๊ฐ€์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋…ผ๋ฌธ์„ ๋˜ ์ผ๋‹ค. ์„œ๋ก ์— ์ด๋Ÿฐ ๊ธ€์ด ์จ ์ ธ ์žˆ๋‹ค.

๐Ÿ“Ž A web crawler is a program that, given one or more seed URLs, downloads the web pages associated with these URLs, extracts any hyperlinks contained in them, and recursively continues to download the web pages identified by these hyperlinks.
Web Crawler Architecture, MARC NAJORK
Microsoft Research, 2009

"์›น ํฌ๋กค๋Ÿฌ๋ž€? seed URL์„ ์ฃผ๋ฉด ๊ด€๋ จ๋œ URL์„ ์ฐพ์•„ ๋‚ด๊ณ , ๊ทธ URL๋“ค์—์„œ ๋˜ ๋‹ค๋ฅธ ํ•˜์ดํผ ๋งํฌ๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ๊ณ„์†ํ•ด์„œ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ํ•˜์ดํผ ๋งํฌ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค."

๐Ÿคฎ ์šฐ์›จ์—์—‘ ๋…ผ๋ฌธ? ๋‚œ ๊ธ€ ์ฝ๋Š”๊ฒŒ ๋„ˆ๋ฌด ๊ท€์ฐฎ์€๋ฐ์š”? ์š”์ฆ˜ ๋‹ค ์œ ํŠœ๋ธŒ๋กœ ๋ณด์ง€ ๋ˆ„๊ฐ€ '๊ธ€'์„ ์‹œ๊ฐ„ ๋“ค์—ฌ์„œ ์ฝ์ฃ ? ๊ทธ๋ ‡๋‹ค๋ฉด Marc Najork๊ฐ€ MS ์ธํ„ด์œผ๋กœ ๊ทผ๋ฌด ํ•˜๋ฉด์„œ ํ–ˆ๋˜ ๋ฐœํ‘œ ์˜์ƒ์„ ๋ณด์ž. ๋ฐœํ‘œ๋ฅผ ๋“ฃ๋Š” ์‚ฌ๋žŒ์ด 5๋ช… ์ •๋„ ๋ฐ–์— ์—†์–ด ๋งค์šฐ ์กฐ์ด ํ•ด ๋ณด์ธ๋‹ค. ์–ด๋–ป๊ฒŒ ์ˆ˜๋ฐฑ๋งŒ๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋ง ํ•˜๋„๋ก ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ธฐ์ดˆ ์ปจ์…‰์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Ž Atrax, a distributed web crawler

์›น ํฌ๋กค๋ง์€ ํƒœ์ดˆ์— www๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋ถ€ํ„ฐ ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ๊ณ ๋ฏผ๋˜๊ณ  ์—ฐ๊ตฌ ํ•ด ์˜จ ์ฃผ์ œ์ด๋‹ค.๐Ÿ“Ž Web Crawler: A Review๋ผ๋Š” ๋…ผ๋ฌธ์˜ 2.1์— ์žˆ๋Š” The History of Web Crawler๋ฅผ ์ฝ์–ด ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ์žฌ๋ฐŒ๋Š” ๋‚ด์šฉ๋“ค์ด ๋งŽ๋‹ค.


"์•ž์œผ๋กœ ๋ธ”๋กœ๊ทธ์— ํฌ๋กค๋Ÿฌ ๋งŒ๋“œ๋Š” ๋ฒ•์„ ์“ธ๊ฑฐ ๊ฐ™์œผ๋ฉด ์ ์–ด๋„ ์ด ์ •๋„๋Š” ์•Œ๊ณ  ์จ๋ผ ์ด ๋จธ์ €๋ฆฌ๋“ค์•„"๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์€๊ฑด ์ ˆ๋Œ€ ์•„๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๋ง์˜ ์š”์ ์€ ์–ด์ค‘์ด ๋– ์ค‘์ด ์ฝ”๋“œ ๋ช‡ ์ค„ ์จ๋†“๊ณ  'ํฌ๋กค๋Ÿฌ'๋“ฑ์œผ๋กœ ์†Œ๊ฐœํ•˜๋Š” ๊ผด์„ ๋ณด๋‹ˆ ์•„์ฃผ ์‹ ๋ฌผ์ด ๋‚œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

"๋งˆ์ผ€ํ„ฐ๋„ ์ฝ”๋”ฉ ๋ฐฐ์šฐ๋Š” ์‹œ๋Œ€!", "์‹œ์ž‘ํ•˜์ž! ๋‹ˆ๋„ ์ฝ”๋”ฉ ํ•ด์•ผํ•œ๋‹ค!" ๋”ฐ์œ„์˜ ์ข†๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ํŒ์„ ์น˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž๋กœ ๋ณ€์‹ ํ•˜๋ผ๊ณ  ๊ด‘๊ณ ๋ฅผ ํ•ด ๋Œ€๊ณ  1ํšŒ์šฉ ์ฝ”๋“œ ๊ฐ–๋‹ค ๋ฐ•์•„ ๋†“๊ณ  'ํฌ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ', '๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๊ฐ•์˜'๋กœ ๋ˆ์„ ๋ฐ›์•„ ๋จน๋Š”๊ฒŒ ํ˜„์‹ค์ด๋‹ค.

๐Ÿ‘บ "์•„๋‹ˆ ์‹œ๋ฐœ, ๊ทธ๋ž˜์„œ ๋ญ ๋‹ค๋ฅด๊ฒŒ ๋ถ€๋ฅด์ž๊ณ ? ์ง€๋Š” ๋Œ€์•ˆ๋„ ์—†๋Š” ์ฃผ์ œ์—"

๋Œ€์•ˆ ์—†๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ „ํ˜•์ ์ธ ๋ง ์ค‘ ํ•˜๋‚˜์ธ๋ฐ "๋ฌธ์ œ๋ฅผ ์ง€์ ํ•˜๋ ค๋ฉด ๋Œ€์•ˆ์„ ๊ฐ–๊ณ  ์˜ค์„ธ์š”"๋‹ค. ํšŒ์‚ฌ ์ƒํ™œ์„ ํ•˜๋ฉด '์ง„์งœ ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…'์„ ๋งˆ๋ จํ•˜์ง€ ์•Š์œผ๋ฉด ํšŒ์˜์—์„œ ์ฐ์†Œ๋ฆฌ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ทœ๋ฒ”์ด๋‹ค.

๋‚ด๊ฐ€ ๋ฌด์Šจ ํฌ๋กค๋ง ํ•™๊ณ„์—์„œ ์ €๋ช…ํ•œ ๋ฐ•์‚ฌ๋‚˜ ๊ต์ˆ˜๋„ ์•„๋‹ˆ๊ณ  ์šฉ์–ด ๊ฐ€์ง€๊ณ  ๊ฑฐ๋“ค๋จน ๊ฑฐ๋ฆด ์ˆœ ์—†๋‹ค. ๋‚ด๊ฐ€ ํ•˜๊ณ ํ”ˆ ๋ง์€ ๊ทธ๋ƒฅ ์ด๊ฒƒ ๋ฟ์ด๋‹ค. 'ํฌ๋กค๋Ÿฌ'๋Š” ์ƒ๋‹นํžˆ ์˜ค๋žซ๋™์•ˆ ์—ฐ๊ตฌ๋œ ์ฃผ์ œ๊ณ  ์–ธ์ œ๊นŒ์ง€๊ณ  scrapy๋‚˜ ์“ฐ๋ฉด์„œ '2019 ๋‹ค์Œ ๋‰ด์Šค ํฌ๋กค๋ง', '2020 ๋‹ค์Œ ๋‰ด์Šค ํฌ๋กค๋ง'... ๊ฐ™์€ ๊ธ€์— ํ‰์ƒ ์˜์กด ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

๋ฐฑ๋ฒˆ ์–‘๋ณดํ•ด์„œ ๊ทธ๊ฒƒ๋“ค์„ ํฌ๋กค๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅด๋”๋ผ๋„ 'ํฌ๋กค๋Ÿฌ๋ž€ ์…€๋ ˆ๋‹ˆ์›€์œผ๋กœ ํŽ˜์ด์ง€ ๊ธ๋Š”๊ฒƒ'์œผ๋กœ ์ž˜๋ชป๋œ ๊ฐœ๋…์ด ์ธํ„ฐ๋„ท์— ๋– ๋Œ์•„ ๋‹ค๋‹ˆ๋Š”๊ฑธ SW ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ž… ๋‹ซ๊ณ  ์ง€์ผœ๋ณด๊ธฐ์—” ๋‚˜๋Š” ๋„ˆ๋ฌด๋‚˜๋„ ์ง€๋…ํ•œ ๊ณต๋Œ€์ƒ์ด๋‹ค.

๐Ÿค– robots.txt ์œค๋ฆฌ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์—†์Œ.

๋„ˆ๋„ ๋‚˜๋„ ๋‹ค ๊ฐ™์ด ์›น ํŽ˜์ด์ง€๋ฅผ ๊ธ์–ด์„œ ์Šฌ๋ž™, ํ…”๋ ˆ๊ทธ๋žจ ์•Œ๋ฆผ ์—ฐ๋™๊นŒ์ง€ ํ•ด์„œ ์žฌ๋ฐŒ๊ฒŒ ๋†€์•„๋ณด์ž๋Š” ๋ง์€ ์‹ ๋‚˜๊ฒŒ ํ•˜๋Š”๋ฐ robots.txt ๋ฃฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๋Š” ์—ฌ์ง€๊ป ๊ฑฐ์˜ ๋ณธ์ ์ด ์—†๋‹ค. ์›น ํŽ˜์ด์ง€๋ผ๊ณ  ํ•ด์„œ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๊ธ์–ด์„œ๋Š” ์•ˆ๋˜๊ณ  robot.txt์— ์ž‘์„ฑ๋œ ๋ฃฐ์— ๋”ฐ๋ผ ์ˆ˜์ง‘์„ ํ•ด๋„ ๋˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๊ณ  ์ˆ˜์ง‘์„ ํ•ด์„  ์•ˆ๋˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค. ๊ถ๊ธˆํ•˜๋ฉด ๊ธ์œผ๋ ค๋Š” ํŽ˜์ด์ง€ ๋ฃจํŠธ ๋„๋ฉ”์ธ์—์„œ /robots.txt์— ๋“ค์–ด๊ฐ€ ๋ณด๋„๋ก ํ•˜์ž. ๋ญ” ์ง“๊ฑฐ๋ฆด ํ•ด๋„ ๋˜๊ณ  ๋ญ” ์ง“๊ฑฐ๋ฆด ํ•ด์„  ์•ˆ๋˜๋Š”์ง€ ๊ฐ„๊ณกํžˆ ๋ถ€ํƒํ•˜๋Š” ๋‚ด์šฉ์ด ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค.

https://www.google.com/robots.txt

๊ฐ ์‚ฌ์ดํŠธ ๋ณ„๋กœ ๋ฃจํŠธ ๊ฒฝ๋กœ์˜ robots.txt์— ๋กœ๋ด‡๋ฃฐ์ด ์ ํ˜€ ์žˆ์œผ๋ฉฐ 'ํฌ๋กค๋Ÿฌ'๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์ด ๋ฃฐ์„ ๋”ฐ๋ผ ์ฃผ๋Š” ๊ฒƒ์ด ์œค๋ฆฌ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์†Œ๊ฐœํ•œ๋‹ค๋ฉด ์ ์–ด๋„ ์ด ๋กœ๋ด‡๋ฃฐ์— ๋Œ€ํ•ด์„  ์„ค๋ช… ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

๊ตฌ๊ธ€์€ robots.txt๋ฅผ ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋Ÿฌ์—์„œ ์‚ฌ์ดํŠธ์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์š”์ฒญํ•  ์ˆ˜ ์—†๋Š” ํŽ˜์ด์ง€ ๋˜๋Š” ํŒŒ์ผ์„ ํฌ๋กค๋Ÿฌ์— ์ง€์‹œํ•˜๋Š” ํŒŒ์ผ์ด๋ผ๊ณ  ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฒˆ์—ญ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ•œ๊ตญ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์†Œ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด๋ฐ ๋‚˜๋ฆ„ ์‰ฝ๊ฒŒ ๋ฒˆ์—ญ ํ•ด ๋ณด๋ฉด ํฌ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์„ ํ•ด๋„ ๋˜๊ฑฐ๋‚˜, ํ•ด์„  ์•ˆ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ ์–ด ๋‘” ๊ณณ ์ •๋„๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ ์™ธ์—๋„ robots.txt์—๋Š” ๋ช‡ ์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋„ ๋˜๋Š”์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ๋‚ด์šฉ์„ ์ ์„ ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธ ํฌ๋กค๋ง์œผ๋กœ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ด์ต์„ ์ทจํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์Ÿ ์—…์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋งํ•ด์„œ ์‹คํ˜• ๋–จ์–ด์ง„ ๊ฐœ๋ฐœ์ž๋„ ์žˆ๋‹ค. ์ข†๋˜์ง€ ์•Š๊ฒŒ ์กฐ์‹ฌํ•ด๋ผ. ์•„๋ž˜ ์‚ฌ๋ก€๋Š” ๋‹จ์ˆœํžˆ DOM ํŒŒ์‹ฑํ•ด์„œ ๊ฐ€์ ธ๊ฐ€๋Š” ์ •๋„๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์˜ˆ API endpoint๋ฅผ ์กฐ์ง„๊ฒŒ ๋ฌธ์ œ๊ธด ํ•˜๋‹ค.

๐Ÿ“Ž ๆณ• โ€œ์—ฌ๊ธฐ์–ด๋•Œ, ์•ผ๋†€์ž ์ •๋ณด ๋ฌด๋‹จ์ˆ˜์ง‘ ๋งž๋‹คโ€...ๅ‰ ๋Œ€ํ‘œ โ€˜์œ ์ฃ„โ€™

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€๋„ ๋‚ด๊ฐ€ ๊ตฌ๊ธ€์— 'ํฌ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ'๋กœ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ robots.txt์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ธ€์€ ์ƒ์œ„์—์„œ ๋‹จ ํ•˜๋‚˜๋„ ์ฐพ์•„ ๋ณผ ์ˆ˜ ์—†๋‹ค. 19๋…„๋„์— ์ธํ„ฐ๋„ท ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์˜ ๋ฉ”๋ชจ์— robots.txt๊ฐ€ ์‚ฌ์‹ค์ƒ ์›น ํฌ๋กค๋ง์˜ ํ‘œ์ค€์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ๋‹ค๊ณ  ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค. ์ด๊ฒƒ๋„ ๊ตฌ๊ธ€์ด ์ œ์ถœํ•œ ๋ฌธ์„œ๊ธด ํ•œ๋ฐ ์žฌ๋ฐŒ๊ฒŒ ์ฝ์–ด ๋ณผ๋งŒ ํ•˜๋‹ค. ๐Ÿ“Ž Robots Exclusion Protocol

์›น ํฌ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค๋“ค์€ ์ž๊ธฐ๋„ค ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ 'robot.txt๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.'๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์˜คํ”ˆ ์†Œ์Šค ํฌ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด robot.txt๋ฅผ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๊ณ  ๊ด‘๊ณ ํ•˜๋Š” ์…ˆ์ด๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์šฐ๋ฆฌ๋„ ํ•œ ๋ฒˆ ์ƒ๊ฐ ํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๐Ÿ“Ž gocolly๋ผ๋Š” ์›น ํฌ๋กค๋Ÿฌ ์˜คํ”ˆ์†Œ์Šค์˜ ๊ธฐ๋Šฅ ์†Œ๊ฐœ์—๋Š” robots.txt support๋ผ๊ณ  ์ ์–ด ๋‘” ๋ถ€๋ถ„์„ ์ฃผ๋ชฉํ•˜์ž

๐Ÿ“˜ ๋” ์ฝ์–ด ๋ณผ ๊ฑฐ๋ฆฌ, ์ฐธ๊ณ ํ•œ ๊ธ€

  • ๐Ÿ“Ž ์›น ํฌ๋กค๋Ÿฌ
    ๊ทธ๋ ‡๋‹ค๊ณ  ํฌ๋กค๋Ÿฌ ๊ด€๋ จํ•ด์„œ ์„ค๋ช…ํ•œ ๊ธ€์ด ์ „ํ˜€ ์—†๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. ์ž˜ ์„ค๋ช… ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ธ€์ด๋‹ค.
  • ๐Ÿ“Ž ๋กœ๋ด‡ ๋ฉ”ํƒ€ ํƒœ๊ทธ, data-nosnippet ๋ฐ X-Robots-Tag ์‚ฌ์–‘
    ๊ตฌ๊ธ€์˜ ์›น ํฌ๋กค๋Ÿฌ๊ฐ€ ๋‚˜์˜ ๋ธ”๋กœ๊ทธ๋‚˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์„ค๋ช… ํ•˜๊ณ  ์žˆ๋‹ค. robots.txt์˜ ์—ฐ์žฅ์„ ์ด๋‹ค.
  • ๐Ÿ“Ž Marc Najork, Research Engineering Director in Google Research
    ๊ธ€ ์ค‘๊ฐ„์— ์†Œ๊ฐœ ํ–ˆ๋˜ ๋ฉ‹์Ÿ์ด Marc Najork๋Š” ์ด์ œ ๊ตฌ๊ธ€ ๋ฆฌ์„œ์น˜์—์„œ ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒ€์ƒ‰๊ณผ ํฌ๋กค๋ง์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์•„์ฃผ ์žฌ๋ฏธ์žˆ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฌธ๋“ค์ด ๋งŽ๋‹ค. ๋‚ด ๋ณ‘์‹  ๊ฐ™์€ ๊ธ€ ๋ณด๋‹ค ์ด ๋ฐ•์‚ฌ์˜ Abstraction ํ•œ ๋ฌธ๋‹จ์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ํ›จ์”ฌ ๊ฐ’์ง€๊ณ  ์ธ์ƒ์— ๋„์›€์ด ๋˜๋‹ˆ๊นŒ ๊ผญ ๋ด๋ผ. ์š”์ฆ˜์€ ๋žญํ‚น์„ ์—ฐ๊ตฌํ•˜๋Š” ๋ชจ์–‘์ด๋‹ค.
  • ๐Ÿ“Ž Google ๊ฒ€์ƒ‰์˜ ์›๋ฆฌ | ํฌ๋กค๋ง ๋ฐ ์ƒ‰์ธ ์ƒ์„ฑ
    ์‹œ๊ฐ„ ์—†๊ณ  ๋นจ๋ฆฌ IR๊ณผ ํฌ๋กค๋Ÿฌ์˜ ๊ฐœ๋… ๋‘˜ ๋‹ค ์ดํ•ดํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์—๊ฒŒ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•˜๋Š” ๊ธ€์ด๋‹ค. ์‹ฌ์ง€์–ด ํ•œ๊ธ€์ด๋‹ˆ๊นŒ ์•ˆ์‹ฌ! ๊ตฌ๊ธ€์—์„œ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๊ฒ€์ƒ‰์˜ ์›๋ฆฌ์ด๋‹ค. ๊ฒ€์ƒ‰ ํ”„๋กœ์„ธ์Šค ์ „์ฒด๋ฅผ ์ญ‰ ๋‘˜๋Ÿฌ ๋ณด๊ธฐ์— ์‹œ์•ผ๊ฐ€ ํ™• ๋„“์–ด ์งˆ ๊ฒƒ์ด๋‹ค.

๐Ÿ˜ก "๋ญ ์ œ๋Œ€๋กœ ์„ค๋ช… ํ•œ ๊ฒƒ๋„ ์—†๋Š”๋ฐ ๋…ผ๋ฌธ ๋งํฌ๋งŒ ๋ƒ…๋‹ค ๊ผฌ๋‹ค ๋ฐ•์•„ ๋†“์œผ๋ฉด ๋•ก์ด๋ƒ?"

๋ฏธ์•ˆํ•˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋„ ์—ฌ๊น„๋Š”๊ฑฐ ๋‹ค ๋ณด์ง„ ์•Š์•˜๊ณ  ์š”์ฆ˜๋„ ์ฝ์–ด๊ฐ€๋Š” ์ค‘์ด๋ผ ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ์ •๋ฆฌ๋ฅผ ํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค... ์ง„์งœ ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋ญ๋ผ๋„ ๋‚จ๊ธฐ๋ฉด ์ˆ˜์š”๋ฅผ ๋ด์„œ ๊ธ€์„ ์“ฐ๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๊ฒฝ๋ ฅ๋„ ์ด๋ ฅ๋„ ์—†๋Š” ๋ณ‘์‹  ๐Ÿ™ƒ

34๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 5์›” 9์ผ

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ๋งŒ ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ํฌ๋กค๋ง์ด ๋งค๋ ฅ์ ์ด์–ด์„œ ์ด๊ฒƒ ์ €๊ฒƒ ์ฐพ์•„๋ณด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋ง์”€ํ•˜์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ „๋ถ€ selenium, scrapy, bs4๋ฅผ ์ด์šฉํ•ด์„œ ์ง์ ‘ ํƒœ๊ทธ๋“ค์„ ์ผ์ผ์ด inspect๋กœ ์ฐพ์•„๋ณธ ๋‹ค์Œ์— ๊ทธ์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์žˆ๋”๋ผ๊ตฌ์š”. ์ €ํฌ ํšŒ์‚ฌ์—์„œ๋„ ์ดˆ๊ธฐ์— ํ”„๋ฆฌ๋žœ์„œ๋ถ„์ด ๋งŒ๋“  ํฌ๋กค๋Ÿฌ๊ฐ€ ๊ทธ ํƒ€๊ฒŸ ์‚ฌ์ดํŠธ์˜ ์นดํ…Œ๊ณ ๋ฆฌ ํ•˜๋‚˜๋งŒ ์ˆ˜์ • ๋ผ๋„ ๋ฐ”๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ณ  ์ผ์ผ์ด ์ˆ˜์ •ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค๋Š” ๋ง์„ ๋“ฃ๊ณ  ์–ด๋–ป๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ๋†€๋žฌ์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋”ฑ ์งš์–ด์ฃผ์‹œ๋„ค์š”!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 11์ผ

๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋ฆ„ ํฌ๋กค๋Ÿฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๊ทผ๊ฐ„๋ถ€ํ„ฐ ํŒฉํŠธ ํญํ–‰๋‹นํ•œ ๋Š๋‚Œ์ด๋„ค์š”. ์ฐจ๊ทผ์ฐจ๊ทผ ์˜ฌ๋ ค์ค€ ๋งํฌ๋“ค ์ฝ์–ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค!
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 11์ผ

์ด๋ฒˆ์—๋„ ํ•˜ํŠธ ์•ˆ๋ˆ„๋ฅด๊ณ  ๊ฐˆ ์ˆ˜๊ฐ€ ์—†๋„ค์š”. ๋งค๋ฒˆ ์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 11์ผ

์–ผ๋งˆ์ „์— ๊ธฐ๋ถ„์ „ํ™˜ ํ•  ๊ฒธ ํฌ๋กค๋ง์„ ํ•ด๋ดค๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๋ณ„๊ฑฐ ์—†์–ด์„œ ์˜ค์ž‰ ํ–ˆ๋Š”๋ฐ ์ฐ ํฌ๋กค๋ง์€ ์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š๊ตฐ์š” ใ…‹ใ…‹ ๊ทธ๋ž˜๋„ ์žฅ๋‚œ๊ฐ ๊ฐ€์ง€๊ณ  ๋†€๋“ฏ์ด ํ•˜๊ธฐ์—๋Š” ์žฌ๋ฐŒ์—ˆ์–ด์š”! ์–ธ์  ๊ฐ€ ํฌ๋กค๋ง์„ ๋” ํŒŒ๋ณด๊ณ ์‹ถ๊ฒŒ ๋œ๋‹ค๋ฉด ๊ณต์œ ํ•ด์ฃผ์‹  ๋งํฌ ์ฐพ์•„๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฐŒ๋Š” ๊ธ€ ๊ฐ์‚ฌํ•ด์š”

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 12์ผ

์„ ์ƒ๋‹˜ ๋‹ค์Œ ์‹ ๋ฌธ๊ธฐ์‚ฌ JSON ๋ฐ›์•„์˜ค๋Š”๊ฑฐ (์ง€๊ธˆ์€ ์•ˆ๋ณด์ด๋Š”๊ฑฐ ๊ฐ™์€๋ฐ) ๊ฐ™์ด ์„œ๋ฒ„์ธก์—์„œ ๋ฟŒ๋ฆฌ๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š”๊ฒƒ๋„ ํฌ๋กค๋ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ๋‹จ์–ด๊ฐ€ ๋ชจํ˜ธํ•œ๊ฒƒ ๊ฐ™์•„ ํ—ท๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค ใ… 

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
์•Œ ์ˆ˜ ์—†์Œ
2020๋…„ 5์›” 12์ผ
์ˆ˜์ •์‚ญ์ œ

์‚ญ์ œ๋œ ๋Œ“๊ธ€์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 12์ผ

์˜ค ์ฒ˜์Œ ๊ธ€์—์„œ ๊ณ„์† ์—…๋ฐ์ดํŠธ ๋˜๋„ค์š”

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 12์ผ

์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 13์ผ

ํ—‰... ํฌ๋กค๋ง ๊ด€๋ จ ๊ธ€ ์ž‘์„ฑํ•˜๊ธฐ ์ „์ธ๋ฐ, ๊นŠ์€๋‚ด์šฉ ๋ฐฐ์›Œ๊ฐ‘๋‹ˆ๋‹ค... ( _ _)

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 14์ผ

ํŒŒ์‹ฑํ•ด์„œ ๊ฐ€์ ธ๊ฐ€๋Š” ์ •๋„๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์˜ˆ API ednpoint๋ฅผ ์กฐ์ง„๊ฒŒ ๋ฌธ์ œ๊ธด ํ•˜๋‹ค.

endpoint ์˜คํƒ€์ธ๊ฒƒ ๊ฐ™์•„์š”!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 15์ผ

์ด ๊ธ€์„ ๋ณด๊ณ  Beautiful Soup์œผ๋กœ ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰์–ด "ํฌ๋กค๋ง" ํ•˜๋Ÿฌ ๊ฐ‘๋‹ˆ๋‹ค. HTML ๋‹ค๋’ค์กŒ๋‹ค ^_^

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 19์ผ

๊ทธ ๊ธ€๋“ค์˜ ๋ชฉํ‘œ๋Š” 'ํฌ๋กค๋Ÿฌ ์ž…๋ฌธ' ์ •๋„์˜ ๋‰˜์•™์Šค๊ฐ€ ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ๋ช‡ ๋ฒˆ ๋ฐ์ธ ํ›„๋กœ ๋”๋Š” ํ•œ๊ธ€ ๋ธ”๋กœ๊ทธ์— ๋“ค์–ด๊ฐ€ ๋ณธ ์ ์ด ์—†๋„ค์š”ใ…‹ใ…‹ใ…‹ใ…‹.. ์ €๋„ ์…€๋ ˆ๋Š„๊ณผ bs4๋กœ ๋งŒ๋“  ๋ฌด์–ธ๊ฐ€์— 'ํฌ๋กค๋Ÿฌ' ๋ผ๊ณ  ์ด๋ฆ„์„ ๋ถ™์—ฌ๋ณธ ์ ์ด ์—†์–ด์„œ ๋”์šฑ๋” ๊ณต๊ฐ์ด ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋‹ค์ˆ˜ ํฌ๋กค๋Ÿฌ์˜ ์ด๋ฆ„์„ ๋‹ฌ๊ณ  ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ๋“ค์€ ์‚ฌ์‹ค ๋ณ€๋™ํƒ์ƒ‰๊ธฐ๋‚˜ ์ž๋™ํ™” ์ •๋„์˜ ์ด๋ฆ„์ด ์ ๋‹นํ•˜์ง€์š”.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 5์›” 22์ผ

์•ˆ๋…•ํ•˜์„ธ์š”! ๊ธ€์„ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๊ฒŒ ์“ฐ์…”์„œ ์—ญ์ฃผํ–‰ ํ•˜๋‹ค๊ฐ€ ์ด ํฌ์ŠคํŠธ๊นŒ์ง€ ์ฝ๊ฒŒ ๋๋„ค์š”:)
์ €๋Š” ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ๊ธฐํš์„ ์ž์ฃผ ํ•ด์„œ bs์™€ selenium์„ ํ™œ์šฉํ•œ ์Šคํฌ๋ž˜ํผ(์ €๋Š” ์ด๋ ‡๊ฒŒ ์นญํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!)๋ฅผ ๋งŽ์ด ์งœ๋Š”๋ฐ, ์ตœ๊ทผ์— ์Šคํฌ๋ž˜ํผ์˜ ํ•œ๊ณ„๋ฅผ ๋Š๋ผ๋˜ ์ฐจ์— ์ด ๊ธ€์„ ์ฝ์–ด๋ณด๋‹ˆ ๊ดœํžˆ ํฌ๋กค๋ง์— ๋Œ€ํ•œ ์š•์‹ฌ๊นŒ์ง€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.๐Ÿ˜ ํฌ๋กค๋Ÿฌ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ http request์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ๋งŒ ๋‚˜์˜ค๋Š”๋ฐ(์‹ฌ์ง€์–ด ์ฑ…์—์„œ๋„!), ํ˜น์‹œ ํฌ๋กค๋ง์„ ๊ณต๋ถ€ํ•˜๋Š”๋ฐ ๊ดœ์ฐฎ์€ ์‚ฌ์ดํŠธ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ถ”์ฒœํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
7์ผ ์ „

์ตœ๊ทผ์— ๋น„์Šทํ•œ ๋ง์„ ๋“ค์—ˆ๋Š”๋ฐ ๊ทธ๋•Œ ๊ทธ๋ƒฅ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์–ป์–ด์˜ค๋ฉด ๋˜์ง€ ์•Š๋ƒ๋Š” ์‹์œผ๋กœ ๋ฐ›์•„์ณค๋Š”๋ฐ ๋ฐ˜์„ฑํ•˜๊ฒŒ ๋˜๋„ค์š”

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
6์ผ ์ „

์™€.. ํฌ๋กค๋Ÿฌ๋ž์‹œ๊ณ  selenium์œผ๋กœ automationํ•ด์„œ ์ •๋ณด ๊ธ์–ด์˜ค๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์ค‘์ธ๋ฐ ํฌ๋กค๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉด ์•ˆ๋˜๊ฒ ๋‚ด์š”

1๊ฐœ์˜ ๋‹ต๊ธ€