1) BeautifulSoup
์ด์ request.get ํจ์๋ฅผ ์ด์ฉํด ์น ํ์ด์ง๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ ์ํํ๋ค.
๊ทธ๋ฐ๋ฐ, ์ด๋ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์คํฌ๋ํํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ์ ๊ตฌ๋ถ ์์ด ํ ์ค๋ก ํ์๋๋ค.
์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐํธํ๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํด BeautifulSoup ํจํค์ง๋ฅผ ์ด์ฉ๋ณด์.
BeautifulSoup ํจํค์ง๋?
html๊ณผ xml๋ฌธ์๋ฅผ ํ์ฑ ํ๋ ํจํค์ง๋ก ๊ตฌ๋ฌธ ๋ถ์ ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐํธํ๊ฒ ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ค.
html์ ํ๊ทธ๋ช , id, class ์ด๋ฆ์ ์ด์ฉํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐํธํ๊ฒ ์ฐพ์ ์ ์์ด ๋ฐ์ดํฐ ํฌ๋กค๋ง/์คํฌ๋ํ ์ ๋ง์ด ์ฌ์ฉํ๋ค.
์ฌ์ฉ
1. ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ ์์น์, ์ด๋ค ํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์๋์ง ํ์ธํ๋ค.
2. requests.get ๋ฉ์๋๋ฅผ ์ด์ฉํด ์น์ฌ์ดํธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ป์ด์จ๋ค.
3. ํด๋น ๋ฐ์ดํฐ๋ฅผ BeautifulSoup ๊ฐ์ฒด๋ก ๋ง๋ ๋ค.
4. ํ๊ทธ๋ช /id/class ์ด๋ฆ์ ์ด์ฉํ์ฌ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ด์จ๋ค.
# ์คํฌ๋ํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์๋ด
์๋ค.
import requests
from bs4 import BeautifulSoup
## ํ๊ทธ ๋ช
(div)์ผ๋ก ๋ฐ์ดํฐ ์ฐพ๊ธฐ
soup.find("div")
## ํ๊ทธ๋ช
(div)๊ณผ id์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ ์ฐพ๊ธฐ
soup.find("div", id="id์ด๋ฆ")
## ํ๊ทธ๋ช
(div)๊ณผ class์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ ์ฐพ๊ธฐ
soup.find("div", "class์ด๋ฆ")
5. ํ์ด์ง๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ํ์ด์ง๋ง๋ค ์คํฌ๋ํํด์ผ ํ๋ค.
ํ ๋ฒ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์คํฌ๋ํํ๋ฉด ๋ง์ ๋ถํ๋ฅผ ์ค ์ ์์ผ๋ฏ๋ก, time ํจํค์ง๋ฅผ ์ด์ฉํด ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ ์๊ณ ์คํ๋ํ์ ์ํํ๋ค.
ํ์ด์ง์ ๊ฒฝ์ฐ ๋ณดํต, url์ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ์ ๋ฌ๋๋ค.
import time
for i in range(1, page_num+1):
res=requests.get("์คํฌ๋ํ์์ํ๋ํ์ด์ง์ฃผ์?page={}".format(i), user_agent)
soup=BeautifulSoup(res.text, "html.parser")
print(question.find("๋ฐ์ดํฐ์ฐพ๊ธธ์ํ๋์กฐ๊ฑด").text.strip())
time.sleep(0.5)
2) Selenium
๊ทธ๋ฐ๋ฐ, ์์ฆ ๋ง์ด ์ฌ์ฉ๋๋ ๋์ ์น ํ์ด์ง์ ๊ฒฝ์ฐ BeautifulSoup ํจํค์ง๋ง์ ์ด์ฉํ๋ค๋ฉด ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์น ์ฌ์ดํธ๋ ํฌ๊ฒ ์ ์ ์น์ฌ์ดํธ์ ๋์ ์น์ฌ์ดํธ๋ก ๋๋ ์ ์๋ค.
์น ํ์ด์ง์ ์ข ๋ฅ
- ์ ์ ์น ์ฌ์ดํธ : HTML ๋ด์ฉ์ด ๊ณ ์
- ๋์ ์น ์ฌ์ดํธ : HTML ๋ด์ฉ์ด ๋์ ์ผ๋ก ๋ณํจ
์ ์ ์น ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋๊ธฐ์ ์ผ๋ก ๋๋๋ง→๋ฐ์ดํฐ๋ก๋ฉ→์๋ต์ด ์งํ๋์ง๋ง,
๋์ ์น ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋น๋๊ธฐ์ ์ธ (๋๋๋ง→), (๋ฐ์ดํฐ๋ก๋ฉ→)์ด ์ผ์ด๋๋ค. ๋๋๋ง์ด ์๋ฃ๋ ํ์ ์๋ต์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๋ก๋ฉ์ด ์๋ฃ๋์ง ์์ ์ฑ๋ก ์น ์ฌ์ดํธ๊ฐ ํ์๋๋ ๊ฒ์ด๋ค.
์ด๋, ๋ฐ์ดํฐ ์คํฌ๋ํ์ ์งํํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ก๋ฉ์ ์๋ ์ํ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์์ง๋ ๋ชจ๋ฅธ๋ค. ๋๋ฌธ์ Selenium ํจํค์ง๋ฅผ ํ์ฉํ๋ค.