๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ก์›น ํ”„๋กœ์ ํŠธ/(ํ’€์Šคํƒ) MOVIEW ์‚ฌ์ดํŠธ

Web Scraping์ด๋ž€?

์›น ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ : [์ˆ˜์ง‘] -> [์ €์žฅ] -> [์ฒ˜๋ฆฌ] -> [๋ถ„์„] -> [์‹œ๊ฐํ™”]

(์ด ์ค‘ ์›น ์Šคํฌ๋ž˜ํ•‘์€ [์ˆ˜์ง‘] ๋‹จ๊ณ„์ž„)

 


์›น ์Šคํฌ๋ž˜ํ•‘์ด๋ž€?

  • ์›น ์Šคํฌ๋ž˜ํ•‘(Web scraping)์€ ํŠน์ • ํŽ˜์ด์ง€์˜ HTML ๋ฌธ์„œ์— ์†Œ์Šค ์ค‘์—์„œ ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ์›น ์Šคํฌ๋ž˜ํ•‘์€ ๋„ค์ด๋ฒ„ ์‡ผํ•‘ ์ตœ์ €๊ฐ€ ๊ฒ€์ƒ‰, ์ธ์Šคํƒ€๊ทธ๋žจ ํƒœ๊ทธ ๊ฒ€์ƒ‰ ๋“ฑ ๋งŽ์€ ๊ณณ์— ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

 

1) ์›น ์Šคํฌ๋ž˜ํ•‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. ๋Œ€์ƒ์„ ์ • : ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ด์˜ฌ url๋กœ ์ด๋™ํ•œ๋‹ค. ๋งŒ์•ฝ ๋„ค์ด๋ฒ„ ์‡ผํ•‘์—์„œ ์—ฐ๊ทน์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŒŒ์‹ฑํ•ด ์˜ค๋ ค๋ฉด https://search.shopping.naver.com/search/all?where=all&frm=NVSCTAB&query=%EC%97%B0%EA%B7%B9
  2. ๋ฐ์ดํ„ฐ ๋กœ๋“œ : API๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด XML, JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์›น ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋ž˜ํ•‘ํ•˜๋ ค๋ฉด HTML๋ฌธ์„œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  3. ๋ฐ์ดํ„ฐ ๋ถ„์„ : ๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์„ ์ •ํ•œ๋‹ค.
  4. ์ˆ˜์ง‘ : ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ณผ์ •์„ ํ†ตํ•ด ์ˆ˜์ง‘ํ•  ๋‚ด์šฉ์„ ์„ ์ •ํ•œ ํ›„, ์ด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŒŒ์ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์ €์žฅํ•œ๋‹ค.

 

 

2) ์›น ์Šคํฌ๋ž˜ํ•‘์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • BeautifulSoup : ํŒŒ์ด์ฌ ์Šคํฌ๋ž˜ํ•‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์„ค์น˜ : pip install beautifulsoup4) 
๋”๋ณด๊ธฐ

1-1) BeautifulSoup 

- ๊ฐœ๋…

  • BeautifulSoup ๊ธฐ๋ณธ์ ์œผ๋กœ HTML์„ ์˜จ์ „ํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
  • ์›๋ž˜ HTML์€ ํƒœ๊ทธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ˆ˜๋งŽ์€ ๊ณต๋ฐฑ๊ณผ ๋ณ€ํ™”ํ•˜๋Š” ์†Œ์Šค๋“ค ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์–ด, ์ •๊ทœํ‘œํ˜„์‹๋“ฑ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ํž˜๋“ค๋‹ค. ํ•˜์ง€๋งŒ beautifulsoup์„ ์ด์šฉํ•˜๋ฉด ์•Œ์•„์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์žก์•„์„œ ๊ณ ์นœ ํ›„ ์šฐ๋ฆฌ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค. 

- ๋‹จ๊ณ„

  • 1. request : ์›นํŽ˜์ด์ง€์˜ URL์„ ์ด์šฉํ•ด์„œ HTML ๋ฌธ์„œ๋ฅผ ์š”์ฒญ
  • 2. response : ์š”์ฒญํ•œ HTML ๋ฌธ์„œ๋ฅผ ํšŒ์‹ 
  • 3. parsing : ํƒœ๊ทธ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์‹ฑ(์ผ๋ จ์˜ ๋ฌธ์ž์—ด์„ ์˜๋ฏธ์žˆ๋Š” ๋‹จ์œ„๋กœ ๋ถ„ํ•ด)

์œ„ 3๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์Šคํฌ๋ž˜ํ•‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

- BeautifulSoup์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์„œ์˜ ์žฅ๋‹จ์ 

Parser ์„ ์–ธ๋ฐฉ๋ฒ• ์žฅ์  ๋‹จ์ 
ํŒŒ์ด์ฌ html.parser BeautifulSoup(markup, 'html.parser') ์„ค์น˜ํ•  ํ•„์š” ์—†์Œ
์ ๋‹นํ•œ ์†๋„
 
lxml HTML parser BeautifulSoup(markup, 'lxml') ๋งค์šฐ ๋น ๋ฆ„ lxml ์ถ”๊ฐ€ ์„ค์น˜ ํ•„์š”
lxml XML parser BeautifulSoup(markup, 'lxml-xml')
BeautifulSoup(markup, 'xml')
๋งค์šฐ ๋น ๋ฆ„
์œ ์ผํ•˜๊ฒŒ ์ง€์›๋˜๋Š” xml parser
lxml ์ถ”๊ฐ€ ์„ค์น˜ ํ•„์š”
html5lib BeautifulSoup(markup, 'html5lib') ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ํŒŒ์‹ฑ
์œ ํšจํ•œ HTML5 ์ƒ์„ฑ
html5lib ์ถ”๊ฐ€ ์„ค์น˜ ํ•„์š”๋งค์šฐ ๋Š๋ฆผ
  • Requests: HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์„ค์น˜ : pip install requests)