Web scraping Tips
1๏ธโฃ ์ค๋ฅ ์์ธ ์ฒ๋ฆฌ
๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ์ํด ํฌ๋กค๋ง์ ํ๋ค๋ณด๋ฉด ์์์น ๋ชปํ ์ผ๋ก ์๋ฌ๊ฐ ๋์ ์ค๋จ๋์ด ๋ฒ๋ ธ์ ๋
์ด๋ฏธ ์์์๋ ๋ฐ์ดํฐ๊ฐ ๋ ๋ผ๊ฐ๊ฑฐ๋ ํน์ ํน์ ์์ ์ดํ๋ก ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ฌ๋ฒ๋ฆฌ๋ ์ผ์ด ์๊ธด๋ค.
๊ทธ๋ด ๋๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด try, except ๋ฌธ์ด๋ค.
try:
# ์ผ๋จ ์คํํด ๋ณผ ์ฝ๋
except:
# ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ํํ ์ฝ๋
2๏ธโฃ time.sleep()
ํฌ๋กค๋ง์ ํ๋ฉด์ ์ดํ์์ด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ธฐ๊ณ์ธ๊ฑธ ๋์น์ฑ์ ๋ง์๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
๊ทธ๋์ time.sleep์ ์ด์ฉํด ์ ์ ์๋์ ์ด ์ ์๊ฒ ํด์ค์ผํ๋ค.
3๏ธโฃ pickle
ํ์ด์ฌ์ ๊ฐ์ฒด๋ฅผ ํ์ผ์ ์ ์ฅํ๋ pickle ๋ชจ๋์ ์ ๊ณตํ๋ค.
๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ํผํด๋ก ์ ์ฅํ๊ณ , ๋ถ๋ฌ์ฌ ์ ์๋ค.
https://docs.python.org/ko/3/library/pickle.html#module-pickle
pickle — ํ์ด์ฌ ๊ฐ์ฒด ์ง๋ ฌํ — Python 3.10.4 ๋ฌธ์
pickle — ํ์ด์ฌ ๊ฐ์ฒด ์ง๋ ฌํ ์์ค ์ฝ๋: Lib/pickle.py pickle ๋ชจ๋์ ํ์ด์ฌ ๊ฐ์ฒด ๊ตฌ์กฐ์ ์ง๋ ฌํ์ ์ญ ์ง๋ ฌํ๋ฅผ ์ํ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ๊ตฌํํฉ๋๋ค. ใํผํด๋ง(pickling)ใ์ ํ์ด์ฌ ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๊ฐ
docs.python.org
4๏ธโฃ Selenium
์ ๋ ๋์์ ์๋ ์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ด ํ๋ฉด์ ์์ ํ ๋, ๋ฒ๊ฑฐ๋ฌ์ด ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๊ฒ์ฌ์ ์๊ณ ๋ฅผ ๋๊ธฐ ์ํด ์ ์๋ ๊ฒ์ด๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ์ ์กฐ์ข ์ด ๊ฐ๋ฅํ๋ค๋ ํฐ ํน์ง์ ๊ฐ๋๋ฐ, ๋๋ฆฌ๊ณ ํ๊ธฐ๋ ์ผ์ด ๋ง๋ค๋ ํฐ ๋จ์ ๋ ์๋ค.
๊ทธ๋์ ์น ์คํฌ๋ํ์ ํ ๋๋ ์ฌ๋งํด์ ์ ๋ ๋์์ ์์ฐ๋ ์ชฝ์ผ๋ก ํด๋ณด๊ณ ์ ์๋๋ค์ถ์๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
์ ๋ ๋์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์น ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ๋ฐ ์์ ์๋ ์ง์ ๋ค์ด๋ก๋๋ฅผ ๋ฐ์ ์คํ์ํค๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
ํ์ง๋ง ์ด์ ๋ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ฒจ์ ๊ทธ๋ด ํ์๊ฐ ์๋ค.
# ์๋์ผ๋ก ํฌ๋กฌ๋๋ผ์ด๋ฒ(๊ฐ์๋ธ๋ผ์ฐ์ ) ํ์ผ์ ๋ค์ด๋ก๋ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from webdriver_manager.chrome import ChromeDriverManager
# ๋ค์ด๋ก๋๋ ํฌ๋กฌ๋๋ผ์ด๋ฒ ํ์ผ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ฉ
from selenium.webdriver.chrome.service import Service
# ์๋์ผ๋ก ํฌ๋กฌ๋๋ผ์ด๋ฒ(๊ฐ์๋ธ๋ผ์ฐ์ ) ํ์ผ์ ๋ค์ด๋ก๋ ํ ์ธํ
service = Service(executable_path=ChromeDriverManager().install())
# ์ธํ
๋ ํฌ๋กฌ๋๋ผ์ด๋ฒ๋ฅผ ์ฐ๊ฒฐํด ๊ฐ์๋ธ๋ผ์ฐ์ ์คํ
driver = webdriver.Chrome(service=service)
์ด๋ ๊ฒ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ด ๋๊ฐ์ด ํฌ๋กค๋ง์ ์งํํ๋ฉด ๋๋ค.
์ฃผ์ํ ์ ์, ์ด ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ ์ฐฝ์ ์ด๋์ํฌ ๋๋ง ๋ง์ง๊ณ , ์๋ง์ง๋๊ฒ ๋ฒ ์คํธ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ผ๋ก ์ปจํธ๋กค ๋ ๋, ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๊ฐ์ฅ ์์ชฝ์ ๋๋๊ฒ ์ข๋ค.
Word Cloud
Konlpy
KoNLPy(์ฝ์์ํ์ด)๋ ํ๊ตญ์ด ์ ๋ณด์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ํจํค์ง๋ค.
KoNLPy: ํ์ด์ฌ ํ๊ตญ์ด NLP — KoNLPy 0.6.0 documentation
KoNLPy: ํ์ด์ฌ ํ๊ตญ์ด NLP KoNLPy(“์ฝ์์ํ์ด”๋ผ๊ณ ์ฝ์ต๋๋ค)๋ ํ๊ตญ์ด ์ ๋ณด์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ํจํค์ง์ ๋๋ค. ์ค์น๋ฒ์ ์ด ๊ณณ์ ์ฐธ๊ณ ํด์ฃผ์ธ์. NLP๋ฅผ ์ฒ์ ์์ํ์๋ ๋ถ๋ค์ ์์ํ๊ธฐ ์์ ๊ฐ
konlpy.org
from konlpy.tag import Okt
tokenizer = Okt() # ๊ฐ์ฒด ์์ฑํ ์ฌ์ฉ
tokens = tokenizer.pos("๋ฌธ์ฅ", norm=True, stem=True)
print(tokens) # ๊ฐ๊ฐ์ ํ ํฐ๊ณผ ํ์ฌ๋ฅผ ํํ๋ก ๋ฌถ์ด ๋ณด์ฌ์ค๋ค
- norm(normalization, ์ ๊ทํ)
- stem(stemming, ์ด๊ทผํ)
WordCloud
์๋ํด๋ผ์ฐ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ WordCloud ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ค์ผํ๋ค.
pip install wordcloud==1.5.0
๋ค์์ ์๋ํด๋ผ์ฐ๋๋ฅผ ์ํ๋ ๋ชจ์์ผ๋ก ๋ง๋๋ ์ฝ๋๋ค.
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
# ๋ฐ๊พธ๊ณ ์ถ์ ๋ชจ์์ด ๊ทธ๋ ค์ง ์ฌ์ง์ array๋ก ๋ณํ
mask_image = np.array(Image.open("์ํ๋ ๋ชจ์ ์ฌ์ง"))
# ์๋ณธ ์ฌ์ง์ ์๊น์ ๊ฐ์ ธ์ด
image_colors = ImageColorGenerator(mask_image)
# WordCloud ๊ฐ์ฒด ์์ฑ
word_cloud = WordCloud(font_path="์ฌ์ฉํ ํฐํธ๊ฒฝ๋ก",
max_words='์ต๋๋จ์ด๊ฐฏ์',
max_font_size='์ต๋๊ธ์ํฌ๊ธฐ',
width='๊ฐ๋ก๊ธธ์ด',
height='์ธ๋ก๊ธธ์ด',
mask=mask_image,
background_color="๋ท๋ฐฐ๊ฒฝ์",
).generate_from_frequencies('๋ง๋ค์ด ๋์ ๋จ์ด์ฌ์ ')
# ์๋ํด๋ผ์ฐ๋ ํฌ๊ธฐ
plt.figure(figsize=(15,15))
# ์๋ณธ ์ฌ์ง์ ์๊น ์
ํ๊ธฐ
plt.imshow(word_cloud.recolor(color_func=image_colors), interpolation='bilinear')
# ์์ฑ๋ ์๋ํด๋ผ์ฐ๋ ์ถ๋ ฅ
plt.show()
'๋ฐ์ดํฐ ๋ถ์' ํค์๋๋ก ๊ฒ์ํ 60๊ฐ์ ๊ธฐ์ฌ์ ๋์จ,
์ต๋ค ์ฌ์ฉ ๋น๋ ๋จ์ด ์์ 100๊ฐ๋ฅผ ํ์ด์ฌ ๋ก๊ณ ์ ์์ ๋ง๋ ์๋ํด๋ผ์ฐ๋๋ค.
'TIL๐ฅ > ๋ฉ์์ด์ฌ์์ฒ๋ผ_AI School 5๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฉ์ฌ] AI SCHOOL 5๊ธฐ_ Day 17 (0) | 2022.03.30 |
---|---|
[๋ฉ์ฌ] AI SCHOOL 5๊ธฐ_ Day 16 (0) | 2022.03.29 |
[๋ฉ์ฌ] AI SCHOOL 5๊ธฐ_ Day 12 (0) | 2022.03.25 |
[๋ฉ์ฌ] AI SCHOOL 5๊ธฐ_ Day 11 (0) | 2022.03.24 |
[๋ฉ์ฌ] AI SCHOOL 5๊ธฐ_ Day 10 (0) | 2022.03.23 |
๋๊ธ