Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/Tools

[Python] ํฌ๋กค๋ง ๋ฐฉ๋ฒ•๊ณผ ๋น„๊ต (requests, BeautifulSoup, selenium)

DeepFlame 2022. 2. 17. 23:04

Python์—์„œ ์›น ํฌ๋กค๋ง์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 

  1. requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์›น ์ •๋ณด๋ฅผ ๋ฐ›๊ณ , BeautifulSoup๋กœ ํŒŒ์‹ฑํ•œ๋‹ค. 
  2. selenium ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด ์›น ์ •๋ณด๋ฅผ ๋ฐ›๋Š”๋‹ค. 

 

๋ณดํ†ต ์›น ์ปจํŠธ๋กค์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ(ํด๋ฆญ)์—๋Š” selenium์„ ํ™œ์šฉํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด requests ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. 

์™œ๋ƒํ•˜๋ฉด selenium์€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ฌ๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ์†๋„๊ฐ€ ๋น ๋ฅธ requests๊ฐ€ ์ข€ ๋” ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๐Ÿค” ๊ถ๊ธˆํ•œ ๊ฒƒ

๊ทธ๋ ‡๋‹ค๋ฉด.... ๋งŒ์•ฝ ์›น ์ปจํŠธ๋กค์ด ํ•„์š”ํ•ด์„œ selenium์„ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด๋†“์€ ์ƒํƒœ์—์„œ ์›น ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒŒ ๋” ๋น ๋ฅผ๊นŒ? 

์ด๋ฒˆ์—๋Š” ๊ทธ๊ฒƒ์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 

 

๐Ÿ‘€ ์‹คํ—˜ ์ค€๋น„

์ด๋ฒˆ์— ํฌ๋กค๋งํ•  ๋Œ€์ƒ์€ ์‚ผ์„ฑ์ „์ž ์ข…๋ชฉ ํ† ๋ก ์‹ค์ด๋‹ค. ์—ฌ๊ธฐ์„œ ํ‘œ์‹œ๋œ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ ๋ฐ•์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋‹ค. 

์˜ค๋Š˜๋„ ํ‰ํ™”๋กœ์šด ์ข…๋ชฉํ† ๋ก ์‹ค...

์›น์—์„œ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. (xpaths, tag name ๋“ฑ๋“ฑ...) ์ด๋ฒˆ์—๋Š” selector๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์š”์†Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ์š”์†Œ๋Š” #content > div.section.inner_sub > table.type2 > tbody ์ด๋‹ค.

 

Chrome ๋ธŒ๋ผ์šฐ์ € + F12

 

 

1. requests


url = 'https://finance.naver.com/item/board.naver?code=005930'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(r.content, 'html.parser')
table = soup.select_one('#content > div.section.inner_sub > table.type2 > tbody')

์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ–ˆ๊ณ , 0.988์ดˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค. ์š”์†Œ๋ฅผ ์ฐพ๋Š” ์ž‘์—…์€ ์ •๋ง ์งง์€ ์‹œ๊ฐ„์— ์ˆ˜ํ–‰๋œ๋‹ค. ์›น ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…๊ณผ ์ •๋ณด๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ์ž‘์—…์ด ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด selenium์€ ์–ด๋–จ๊นŒ? 

 

 

2. selenium


start_time = time.time()
url = 'https://finance.naver.com/item/board.naver?code=005930'
driver = webdriver.Chrome('./data/chromedriver.exe')
driver.get(url)
table = driver.find_elements_by_css_selector('#content > div.section.inner_sub > table.type2 > tbody')
driver.quit()

๊ฒฐ๊ณผ๋Š” ์•ฝ 4.655์ดˆ... ๊ฐ€ ๋‚˜์™”๋‹ค. requests์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ 5๋ฐฐ ์ •๋„ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๊ณ  ๋‹ซํžˆ๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ฒƒ์€ ๋งž์œผ๋‚˜, ์ˆœ์ˆ˜ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์ด 4๋ฐฐ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์•„๋ฌด๋ž˜๋„ selenium์—์„œ๋Š” ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์›น ์ปจํŠธ๋กค์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค. 

 

 

3. ๊ฒฐ๋ก 


  1. requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์›น ์ •๋ณด๋ฅผ ๋ฐ›๊ณ , BeautifulSoup๋กœ ํŒŒ์‹ฑํ•œ๋‹ค. ๐Ÿ‘‰ 0.988์ดˆ
  2. selenium ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด ์›น ์ •๋ณด๋ฅผ ๋ฐ›๋Š”๋‹ค. ๐Ÿ‘‰ 4.655์ดˆ

์›น ์ปจํŠธ๋กค์ด ํ•„์š”ํ•ด์„œ selenium์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด ์•„๊นŒ์šธ ์ˆ˜ ์žˆ์œผ๋‚˜, requests๋กœ ์›น ์ •๋ณด๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ๐Ÿค—