์ค๋๋ 100500๊ฐ์ ๋ฐ์ดํฐ ๊ณผํ ๊ณผ์ ์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ ๊ณผํ์์ ๊ฐ์ฅ ๋ง์ ๋์ ๋ฐ์ดํฐ ๊ณผํ ๊ณผ์ ์ ํตํด ์ป์ ์ ์๋ค๋ ๊ฒ์ด ์ค๋ซ๋์ ์๋ ค์ ธ ์์ต๋๋ค(์ฝ์ ํ ์ ์๋๋ฐ ์ ๋
์ ํ๋์?). ์ด ์ฝ์ค์ ๊ฐ์ฅ ํฐ ๋จ์ ์ ์ค์ ์์
๊ณผ ์๋ฌด ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฌด๋ ๊นจ๋ํ๊ณ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ํ์์ผ๋ก ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ์ค๋ฅผ ๋ ๋ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์์ํ๋ฉด ๋ง์ ๋์์ค๊ฐ ๋ํ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋์ ๋ด ๋๋ฃ, ๋๋ฃ๋ค์๊ฒ ์ผ์ด๋ ์ค์ ์ฌ๊ฑด์ ๋ฐํ์ผ๋ก "๋ฐ์ดํฐ ๊ณผํ์์ ๋ฌด์์ด ์๋ชป๋ ์ ์๋๊ฐ"๋ผ๋ ์ผ๋ จ์ ๋ ธํธ๋ฅผ ์์ํฉ๋๋ค. ์ค์ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๊ณผํ ์์ ์ ๋ถ์ํฉ๋๋ค. ์ด๊ฒ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ค๋์ ๋ฐ์ดํฐ ์์ง ์์ ๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ์ค์ ๋ฐ์ดํฐ๋ก ์์ ์ ์์ํ ๋ ๊ฐ์ฅ ๋จผ์ ์ค์ํ๋ ๊ฒ์ ์ค์ ๋ก ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ๊ด๋ จ์ฑ์ด ๋์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ์ฌ์ ํต์ฌ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์์ง, ์ ๋ฆฌ ๋ฐ ์ค๋นํ๋ ๋ฐ ํ์ํ ์๊ฐ, ๋ฆฌ์์ค ๋ฐ ๋ ธ๋ ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๊ณผ์ํ๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์ง ๋ ผ์ํ ๊ฒ์ ๋๋ค.
๋ค์ํ ์ถ์ ์ ๋ฐ๋ฅด๋ฉด ์ ๋ฆฌ, ๋ณํ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๊ธฐ๋ฅ ์์ง๋์ด๋ง ๋ฑ์ 80~90%์ ์๊ฐ์ด ์์๋๊ณ ๋ถ์์๋ 10~20%์ ์๊ฐ์ด ์์๋๋ ๋ฐ๋ฉด, ๊ฑฐ์ ๋ชจ๋ ๊ต์ก ์๋ฃ๋ ๋ถ์์๋ง ์ค์ ์ ๋๊ณ ์์ต๋๋ค.
๋ํ์ ์ธ ์๋ก ์ธ ๊ฐ์ง ๋ฒ์ ์ ๊ฐ๋จํ ๋ถ์ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ณ "์ ํ๋๋ ์ํฉ"์ด ๋ฌด์์ธ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์์ง ๋ฐ ์ปค๋ฎค๋ํฐ ๋น๊ต ์์ ์ ์ ์ฌํ ๋ณํ์ ๋ค์ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
- Reddit ํ์ ๋ ๋ง XNUMX๊ฐ
- Habr์ ๋ ์น์
- Odnoklassniki์ ๋ ๊ทธ๋ฃน
์ด๋ก ์์ ์กฐ๊ฑด๋ถ ์ ๊ทผ ๋ฐฉ์
์ฌ์ดํธ๋ฅผ ์ด๊ณ ์์ ๋ฅผ ์ฝ์ด๋ณด์ธ์. ๋ช ํํ๋ค๋ฉด ์ฝ๊ธฐ์ ๋ช ์๊ฐ, ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ๋ช ์๊ฐ์ ํฌ์ํ์ธ์. ์์งํ๋ ๋ฐ ๋ช ์๊ฐ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๋ช ์๊ฐ์ ์๋น๋ก ํฌ์ํ์ธ์(XNUMX๋ฅผ ๊ณฑํ๊ณ N์๊ฐ์ ๋ํ์ธ์).
ํต์ฌ ์ฌํญ: ์์ ์๊ฐ์ ์์ ์๊ฐ์ ๋ํ ๊ฐ์ ๊ณผ ์ถ์ธก์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์์์ ์ค๋ช ํ ์กฐ๊ฑด๋ถ ๋ฌธ์ ์ ๋ํด ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ์ ํ์ฌ ์๊ฐ ๋ถ์์ ์์ํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ ์ผ๋ง์ด๋ฉฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์งํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ ์ผ๋ง์ ๋๊น(*์๋ ์ฐธ์กฐ*).
- ํ ๊ธฐ๋ก์ ์์ง ์๊ฐ์ ์ผ๋ง๋ ๋๋ฉฐ, ๋ ๋ฒ์งธ ๊ธฐ๋ก์ ์์งํ๋ ค๋ฉด ์ผ๋ง๋ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๊น?
- ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ชจ๋ ๊ฒ์ด ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์์์ ์์ํ๋ ์ฝ๋ ์์ฑ์ ๊ณ ๋ คํด๋ณด์ธ์.
- ์น์ธ์ด ํ์ํ์ง ํ์ ํ๊ณ API๋ฅผ ํตํด ์ก์ธ์ค ๊ถํ์ ์ป๋ ์๊ฐ์ ์ค์ ํ์ธ์.
- ๋ฐ์ดํฐ ๋ณต์ก์ฑ์ ํจ์๋ก ์ค๋ฅ ์๋ฅผ ์ค์ ํฉ๋๋ค. ํน์ ์์ ์ ๋ํด ํ๊ฐํฉ๋๋ค(๊ตฌ์กฐ, ๋ณํ ์, ์ถ์ถ ๋์ ๋ฐ ๋ฐฉ๋ฒ).
- ๋นํ์ค ํ๋ก์ ํธ ๋์๊ณผ ๊ด๋ จ๋ ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ ๋ฌธ์ ๋ฅผ ์์ ํฉ๋๋ค.
- ํ์ํ ๊ธฐ๋ฅ์ด ๋ฌธ์์ ์๋์ง ํ๊ฐํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ์์ด ์ผ๋ง๋ ํ์ํ์ง ํ๊ฐํ์ญ์์ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๊ฐ์ ์ถ์ ํ๋ ค๋ฉด ์ค์ ๋ก "์ค์ ์ค์ธ ์ ์ฐฐ"์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ํฌ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ผ๋ง ๊ณํ์ด ์ ์ ํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ "๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์?"๋ผ๊ณ ์๋ฌด๋ฆฌ ๊ฐ์ํ๋๋ผ๋ ์๋น ๋ถ์์ ์ํด ์๊ฐ์ ๋ฒ๊ณ ๋ฌธ์ ์ ์ค์ ๋งค๊ฐ ๋ณ์์ ๋ฐ๋ผ ์๊ฐ์ด ์ผ๋ง๋ ๋ฌ๋ผ์ง์ง ๋ ผ์ํด ๋ณด์ธ์.
์ด์ ๊ทธ๋ฌํ ๋งค๊ฐ๋ณ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์์ : ์ถ์ ์ ์์ ์ ๋ฒ์์ ๋ณต์ก์ฑ์ ์ํฅ์ ๋ฏธ์น๋ ์ฃผ์ ์์์ ๋ํ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์ถ์ธก ๊ธฐ๋ฐ ์ถ์ ์ ๊ธฐ๋ฅ์ ์์๊ฐ ์ถฉ๋ถํ ์๊ณ ๋ฌธ์ ์ค๊ณ์ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์์๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ ์ข์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ํ์ง๋ง ๋ค์์ ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค ๋ฌธ์ ์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฌํ ์์๊ฐ ์์ฒญ๋๊ฒ ๋ง์์ ธ์ ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๋ถ์ ์ ํด์ง๋๋ค.
Reddit ์ปค๋ฎค๋ํฐ ๋น๊ต
๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค(๋์ค์ ๋ฐํ์ง๊ฒ ์ง๋ง). ์ผ๋ฐ์ ์ผ๋ก ์์งํ๊ฒ ๋งํ๋ฉด ๊ฑฐ์ ์ด์์ ์ธ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ณต์ก์ฑ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
- ๊น๋ํ๊ณ ๋ช ํํ๋ฉฐ ๋ฌธ์ํ๋ API๊ฐ ์์ต๋๋ค.
- ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ ํฐ์ด ์๋์ผ๋ก ํ๋๋๋ค๋ ๊ฒ์ ๋๋ค.
- ์ด
ํ์ด์ฌ ๋ํผ - ์๊ฐ ๋ง์์. - Reddit์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์์งํ๋ ์ปค๋ฎค๋ํฐ(Python ๋ํผ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ YouTube ๋์์๊น์ง ํฌํจ)
์๋ฅผ ๋ค๋ฉด . - ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ํ์ํ ๋ฉ์๋๋ API์ ์กด์ฌํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๊น๋ํด ๋ณด์ ๋๋ค. ์๋๋ ๊ฒ์๋ฌผ์ ๋ํ ๋๊ธ์ ์์งํ๋ ํจ์์ ์์ ๋๋ค.
def get_comments(submission_id):
reddit = Reddit(check_for_updates=False, user_agent=AGENT)
submission = reddit.submission(id=submission_id)
more_comments = submission.comments.replace_more()
if more_comments:
skipped_comments = sum(x.count for x in more_comments)
logger.debug('Skipped %d MoreComments (%d comments)',
len(more_comments), skipped_comments)
return submission.comments.list()
์์ ๊ฐ์ ธ์จ
์ด๊ฒ์ด ์ต์ ์ ๊ฒฝ์ฐ๋ผ๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์ค์ ์ํ์์ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ์์๋ฅผ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- API ์ ํ - ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด์ ์ผ๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค(์์ฒญ ๊ฐ ๋๊ธฐ ๋ฑ).
- ์์ง ์๊ฐ - ์์ ํ ๋ถ์๊ณผ ๋น๊ต๋ฅผ ์ํด ๊ฑฐ๋ฏธ๊ฐ ํ์ ๋ ๋ง์ ํต๊ณผํ๋ ๋ฐ๋ง ์๋นํ ์๊ฐ์ ํ๋ณดํด์ผ ํฉ๋๋ค.
- ๋ด์ ์๋ฒ์์ ์คํ๋์ด์ผ ํฉ๋๋ค. ๋ ธํธ๋ถ์์ ์คํํ๊ณ ๋ฐฐ๋ญ์ ๋ฃ๊ณ ๋น์ฆ๋์ค๋ฅผ ์ํํ ์๋ ์์ต๋๋ค. ๊ทธ๋์ VPS์์ ๋ชจ๋ ๊ฒ์ ์คํํ์ต๋๋ค. ํ๋ก๋ชจ์ ์ฝ๋ habrahabr10์ ์ฌ์ฉํ๋ฉด ๋น์ฉ์ 10%๋ฅผ ์ถ๊ฐ๋ก ์ ์ฝํ ์ ์์ต๋๋ค.
- ์ผ๋ถ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ์ฑ(๊ด๋ฆฌ์๊ฐ ๋ณผ ์ ์๊ฑฐ๋ ์์งํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ค์) - ์ด๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ฉฐ ์์น์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์๊ฐ ๋ด์ ์์ง๋ ์๋ ์์ต๋๋ค.
- ๋คํธ์ํฌ ์ค๋ฅ: ๋คํธ์ํน์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
- ์ด๊ฒ์ ์ด์์๋ ์ค์ ๋ฐ์ดํฐ์ด๋ฉฐ ๊ฒฐ์ฝ ์์ํ์ง ์์ต๋๋ค.
๋ฌผ๋ก ์ด๋ฌํ ๋์์ค๋ฅผ ๊ฐ๋ฐ์ ํฌํจ์ํค๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ธ ์๊ฐ/์์ผ์ ๊ฐ๋ฐ ๊ฒฝํ์ด๋ ์ ์ฌํ ์์ ์ ๋ํ ๊ฒฝํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์์ ์ด ์์ ํ ์์ง๋์ด๋ง์ด๋ฉฐ ํด๊ฒฐํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ ์ฒด ์์ง์์ด ํ์ํ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋งค์ฐ ์ ํ๊ฐ๋๊ณ , ์์ฝ๋๊ณ ์๋ฃ๋ ์ ์์ต๋๋ค.
Habr ์น์ ๋น๊ต
Habr์ ์ค๋ ๋ ๋ฐ/๋๋ ์น์ ์ ๋น๊ตํ๋ ๋ณด๋ค ํฅ๋ฏธ๋กญ๊ณ ์ค์ํ์ง ์์ ์ฌ๋ก๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๋ณต์ก์ฑ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ ์์ ์ ์ดํดํ๋ ค๋ฉด ์์ ์์ฒด๋ฅผ ์กฐ๊ธ ๋ ์์ธํ ์ดํด๋ณด๊ณ ์คํํด์ผ ํฉ๋๋ค.
- ์ฒ์์๋ API๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. ์, ์, Habr์๋ API๊ฐ ์์ง๋ง ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ ์ ์์ต๋๋ค(๋๋ ์ ํ ์๋ํ์ง ์์ ์๋ ์์ต๋๋ค).
- ๊ทธ๋ฐ ๋ค์ html - "๊ฐ์ ธ์ค๊ธฐ ์์ฒญ" ๊ตฌ๋ฌธ ๋ถ์์ ์์ํฉ๋๋ค. ๋ฌด์์ด ์๋ชป๋ ์ ์์ต๋๊น?
- ์ด์จ๋ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์ ๊ทผ ๋ฐฉ์์ ID๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์
๋๋ค. ๊ฐ์ฅ ํจ์จ์ ์ด์ง ์์ผ๋ฉฐ ๋ค์ํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ์ ์ ์ ์ํ์ธ์. ๋ค์์ ๋ชจ๋ ๊ธฐ์กด ID ์ค์์ ์ค์ ID์ ๋ฐ๋์ ๋ํ ์์
๋๋ค.
์์ ๊ฐ์ ธ์จ์ด ๊ธฐ์ฌ. - ์น ์์ HTML๋ก ์ธ์ธ ์์ ๋ฐ์ดํฐ๋ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์ฌ์ ํ๊ฐ๋ฅผ ์์งํ๊ณ ์ ์ฅํ๋ ค๊ณ ํฉ๋๋ค. HTML์์ ์ ์๋ฅผ ๋ผ์ด๋ด๊ณ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ซ์๋ก ์ ์ฅํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
1) int(score)์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. Habrรฉ์๋ "-5" ์ค๊ณผ ๊ฐ์ด ๋ง์ด๋์ค๊ฐ ์์ผ๋ฏ๋ก ๋ง์ด๋์ค ๊ธฐํธ๊ฐ ์๋ ์ ๋์์ ๋๋ค(์๊ธฐ์น ์๊ฒ ๊ทธ๋ ์ฃ ?). ์ด๋ค ์์ ์์๋ ๊ทธ๋ฐ ๋์ฐํ ์์ ์ผ๋ก ํ์์ ์๋ช ์ ๋ถ์ด๋ฃ์ด์ผ ํ์ต๋๋ค.
try: score_txt = post.find(class_="score").text.replace(u"โ","-").replace(u"+","+") score = int(score_txt) if check_date(date): post_score += score
๋ ์ง, ํ๋ฌ์ค ๋ฐ ๋ง์ด๋์ค๊ฐ ์ ํ ์์ ์ ์์ต๋๋ค(์์ check_date ํจ์์์ ๋ณผ ์ ์๋ฏ์ด ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ต๋๋ค).
2) ์ด์ค์ผ์ดํ๋์ง ์์ ํน์ ๋ฌธ์ - ํน์ ๋ฌธ์๊ฐ ์ฌ ๊ฒ์ด๋ฏ๋ก ์ค๋น๊ฐ ํ์ํฉ๋๋ค.
3) ํฌ์คํธ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
4) ์ด์ ๊ฒ์๋ฌผ์ **์ด์ํ ๊ตฌ์กฐ**๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ํ ์ ์๋ ์ผ๊ณผ ๋ฐ์ํ์ง ์์ ์ ์๋ ์ผ์ ์ฒ๋ฆฌํด์ผ ํ๋ฉฐ ๋ฌด์์ด ์๋ชป๋ ์ง, ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋ ์ง, ๋ฌด์์ด ์ด๋์ ๋จ์ด์ง์ง ํ์คํ ์์ธกํ ์ ์์ต๋๋ค. ๋จ์ง ์๋ํ๊ณ ๊ณ ๋ คํด์ผ ํ ๊ฒ์ ๋๋ค. ํ์๊ฐ ๋์ง๋ ์ค๋ฅ.
- ๊ทธ๋ฐ ๋ค์ ์ฌ๋ฌ ์ค๋ ๋์์ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋์ ์ค๋ ๋์์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ 30์๊ฐ ์ด์์ด ์์๋ฉ๋๋ค(์ด๋ ์์ ํ ์ด๋ฏธ ์๋ ์ค์ธ ๋จ์ผ ์ค๋ ๋ ๊ตฌ๋ฌธ ๋ถ์๊ธฐ์ ์คํ ์๊ฐ์ด๋ฉฐ, ์ ์๊ธฐ ์ํ์ด๋ฉฐ ์ด๋ค ๊ธ์ง์๋ ํด๋น๋์ง ์์ต๋๋ค). ์์
์ด ๊ธฐ์ฌ์์ ์ด๋ ์ด๋ ์์ ์์ ์ ์ฌํ ๊ณํ์ผ๋ก ์ด์ด์ก์ต๋๋ค.
๋ณต์ก์ฑ๋ณ ์ ์ฒด ์ฒดํฌ๋ฆฌ์คํธ:
- ๋คํธ์ํฌ ์์ ๋ฐ HTML ๊ตฌ๋ฌธ ๋ถ์์ ๋ฐ๋ณตํ๊ณ ID๋ก ๊ฒ์ํฉ๋๋ค.
- ์ด๊ธฐ์ข ๊ตฌ์กฐ์ ๋ฌธ์.
- ์ฝ๋๊ฐ ์ฝ๊ฒ ๋น ์ง ์ ์๋ ๊ณณ์ด ๋ง์ต๋๋ค.
- ||๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค || ์ํธ.
- ํ์ํ ๋ฌธ์, ์ฝ๋ ์์ ๋ฐ/๋๋ ์ปค๋ฎค๋ํฐ๊ฐ ๋๋ฝ๋์์ต๋๋ค.
์ด ์์ ์ ์์๋๋ ์์ ์๊ฐ์ Reddit์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ์์๋๋ ์๊ฐ๋ณด๋ค 3~5๋ฐฐ ๋ ๊ธธ์ด์ง๋๋ค.
Odnoklassniki ๊ทธ๋ฃน์ ๋น๊ต
์ค๋ช ๋ ๊ธฐ์ ์ ์ผ๋ก ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ฌ๋ก๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ๋์๊ฒ๋ ๊ทธ๊ฒ์ด ํฅ๋ฏธ๋ก์ ๋๋ฐ, ์ธ๋ป ๋ณด๋ฉด ๊ฝค ์ฌ์ํด ๋ณด์ด์ง๋ง ๋ง๋๊ธฐ๋ฅผ ์ฐ๋ฅด๋ ์๊ฐ ์ ํ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก๊ธฐ ๋๋ฌธ์ด๋ค.
๋์ด๋ ์ฒดํฌ๋ฆฌ์คํธ๋ถํฐ ์์ํด์ ๊ทธ ์ค ๋ง์ ์ฒดํฌ๋ฆฌ์คํธ๊ฐ ์ฒ์์ ๋ณด์๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ค์ธ ๊ฒ์ด๋ผ๋ ์ ์ ์์๋์ธ์.
- API๊ฐ ์์ง๋ง ํ์ํ ๊ธฐ๋ฅ์ด ๊ฑฐ์ ์์ ํ ๋ถ์กฑํฉ๋๋ค.
- ํน์ ๊ธฐ๋ฅ์ ๋ํด์๋ ๋ฉ์ผ๋ก ์ก์ธ์ค๋ฅผ ์์ฒญํด์ผ ํฉ๋๋ค. ์ฆ, ์ก์ธ์ค ๊ถํ ๋ถ์ฌ๊ฐ ์ฆ์ ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค.
- ๊ทธ๊ฒ์ ๋์ฐํ๊ฒ ๋ฌธ์ํ๋์ด ์์ต๋๋ค (์ฒ์์๋ ๋ฌ์์์ด์ ์์ด ์ฉ์ด๊ฐ ๋ชจ๋ ๊ณณ์์ ์์ฌ ์๊ณ ์์ ํ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ๋๋ก๋ ์ด๋๊ฐ์์ ์ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ถ์ธกํด์ผํฉ๋๋ค). ๋ํ ๋์์ธ์ ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ป๋ ๋ฐ ์ ํฉํ์ง ์์ต๋๋ค. ,
์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ธฐ๋ฅ . - ๋ฌธ์์๋ ์ธ์ ์ด ํ์ํ์ง๋ง ์ค์ ๋ก๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ API ๋ชจ๋์ ๋ชจ๋ ๋ณต์ก์ฑ์ ์ดํดํ๊ณ ๋ฌด์ธ๊ฐ๊ฐ ์๋ํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ๋ ๊ฒ ์ธ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ฌ๋ก๋ ์๊ณ ์ปค๋ฎค๋ํฐ๋ ์์ผ๋ฉฐ ์ ๋ณด ์์ง์ ์์ด ์ ์ผํ ์ง์ ์ง์ ์ ์๊ท๋ชจ์
๋๋ค.
์ธ๊ฐ Python์์(์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ง์ง ์์) - ํ์ํ ๋ฐ์ดํฐ ์ค ๋ง์ ๋ถ๋ถ์ด ์ ๊ฒจ ์๊ธฐ ๋๋ฌธ์ Selenium์ด ๊ฐ์ฅ ์คํ ๊ฐ๋ฅํ ์ต์
์ธ ๊ฒ ๊ฐ์ต๋๋ค.
1) ์ฆ, ๊ฐ์์ ์ฌ์ฉ์(๋ฐ ์ง์ ๋ฑ๋ก)๋ฅผ ํตํด ์ธ์ฆ์ด ์ด๋ฃจ์ด์ง๋๋ค.2) ๊ทธ๋ฌ๋ Selenium์ ์ฌ์ฉํ๋ฉด ์ ํํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ ์์ ์ด ๋ณด์ฅ๋์ง ์์ต๋๋ค(์ ์ด๋ ok.ru์ ๊ฒฝ์ฐ ํ์คํ).
3) Ok.ru ์น์ฌ์ดํธ์๋ JavaScript ์ค๋ฅ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ๋๋๋ก ์ด์ํ๊ณ ์ผ๊ด๋์ง ์๊ฒ ๋์ํฉ๋๋ค.
4) ํ์ด์ง ๋งค๊น, ์์ ๋ก๋ ๋ฑ์ ์ํํด์ผ ํฉ๋๋ค.
5) ๋ํผ๊ฐ ์ ๊ณตํ๋ API ์ค๋ฅ๋ ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ด์ํ๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(์คํ ์ฝ๋ ์กฐ๊ฐ).
def get_comments(args, context, discussions): pause = 1 if args.extract_comments: all_comments = set() #makes sense to keep track of already processed discussions for discussion in tqdm(discussions): try: comments = get_comments_from_discussion_via_api(context, discussion) except odnoklassniki.api.OdnoklassnikiError as e: if "NOT_FOUND" in str(e): comments = set() else: print(e) bp() pass all_comments |= comments time.sleep(pause) return all_comments
๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ค์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
OdnoklassnikiError("Error(code: 'None', description: 'HTTP error', method: 'discussions.getComments', params: โฆ)โ)
6) ๊ถ๊ทน์ ์ผ๋ก Selenium + API๊ฐ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ์ต์ ์ผ๋ก ๋ณด์ ๋๋ค.
- ์ํ๋ฅผ ์ ์ฅํ๊ณ ์์คํ ์ ๋ค์ ์์ํด์ผ ํ๋ฉฐ ์ฌ์ดํธ์ ์ผ๊ด๋์ง ์์ ๋์์ ํฌํจํ์ฌ ๋ง์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ฉฐ ์ด๋ฌํ ์ค๋ฅ๋ ์์ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค(๋ฌผ๋ก ์ ๋ฌธ์ ์ผ๋ก ํ์๋ฅผ ์์ฑํ์ง ์๋ ํ).
์ด ์์ ์ ์กฐ๊ฑด๋ถ ์์ ์๊ฐ์ Habr์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ ๋๋ณด๋ค 3~5๋ฐฐ ๋ ๋์ต๋๋ค. Habr์ ๊ฒฝ์ฐ HTML ๊ตฌ๋ฌธ ๋ถ์๊ณผ ํจ๊ป ์ ๋ฉด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ OK์ ๊ฒฝ์ฐ ์ค์ํ ์์น์์ API๋ก ์์ ํ ์ ์๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ .
์กฐ์ฌ ๊ฒฐ๊ณผ
๋ฐฉ๋ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ ๋ชจ๋์ "ํ์ฅ"(์ค๋ ๊ณํ ์ค์ ๋๋ค!) ๊ธฐํ์ ์ผ๋ง๋ ์์ธกํด์ผ ํ๋์ง์ ๊ด๊ณ์์ด, ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ์ํ์ง ์๊ณ ๋ ์คํ ์๊ฐ์ ์ ์ฑ์ ์ผ๋ก ์์ธกํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ข ๋ ์ฒ ํ์ ์ผ๋ก ๋งํ๋ฉด ๋ฏผ์ฒฉํ ์ถ์ ์ ๋ต์ ์์ง๋์ด๋ง ์์ ์ ์ ํฉํ์ง๋ง ๋ ์คํ์ ์ด๊ณ ์ด๋ค ์๋ฏธ์์ "์ฐฝ์์ "์ด๊ณ ํ๊ตฌ์ ์ธ ๋ฌธ์ , ์ฆ ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ๋ฌธ์ ๋ ์ ์ฌํ ์ฃผ์ ์ ์์์์ ๊ฐ์ด ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๋ ผ์ํ ๊ฒ์ ๋๋ค.
๋ฌผ๋ก ๋ฐ์ดํฐ ์์ง์ ๋ํ์ ์ธ ์์ผ ๋ฟ์ ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๊ฐ๋จํ๊ณ ๊ธฐ์ ์ ์ผ๋ก ๋ณต์กํ์ง ์์ ์์ ์ด๋ฉฐ, ์ ๋ง๋ ์ธ๋ถ ์ฌํญ์ ์จ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํํ ์ด ์์ ์ ํตํด ๋ฌด์์ด ์๋ชป๋ ์ ์๋์ง, ์์ ์ ์์๋๋ ์๊ฐ์ด ์ ํํ ์ผ๋ง๋ ๋๋์ง์ ๋ํ ๊ฐ๋ฅํ ์ต์ ์ ์ ์ฒด ๋ฒ์๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ถ๊ฐ ์คํ ์์ด ์์ ์ ํน์ฑ์ ์ดํด๋ณด๋ฉด Reddit๊ณผ OK๊ฐ ๋น์ทํด ๋ณด์ ๋๋ค. API, Python ๋ํผ๊ฐ ์์ง๋ง ๋ณธ์ง์ ์ผ๋ก ์ฐจ์ด๊ฐ ํฝ๋๋ค. ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ก ํ๋จํ๋ฉด Habr์ ๋ถ์์ OK๋ณด๋ค ๋ ๋ณต์กํด ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ ๋ฐ๋์ด๋ฉฐ ์ด๋ ๋ฌธ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ๊ฐ๋จํ ์คํ์ ์ํํ์ฌ ์ ํํ ์ ์ ์๋ ๊ฒ์ ๋๋ค.
๋ด ๊ฒฝํ์ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์๋น ๋ถ์ ์์ฒด์ ๊ฐ๋จํ ์ฒซ ๋ฒ์งธ ์คํ์ ํ์ํ ์๊ฐ์ ๋๋ต์ ์ผ๋ก ์ถ์ ํ๊ณ ๋ฌธ์๋ฅผ ์ฝ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฒด ์์ ์ ๋ํ ์ ํํ ์ถ์ ์น๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ์์ผ ๋ฐฉ๋ฒ๋ก ๊ณผ ๊ด๋ จํ์ฌ "์์ ๋งค๊ฐ๋ณ์ ์ถ์ " ํฐ์ผ์ ์์ฑํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก "์คํ๋ฆฐํธ" ๋ด์์ ๋ฌ์ฑํ ์ ์๋ ์์ ์ ํ๊ฐํ๊ณ ๊ฐ๊ฐ์ ๋ํด ๋ณด๋ค ์ ํํ ์ถ์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ผ.
๋ฐ๋ผ์ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ฃผ์ฅ์ "๋น๊ธฐ์ ์ " ์ ๋ฌธ๊ฐ์๊ฒ ์์ง ํ๊ฐ๋์ง ์์ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ์ผ๋ง๋ ๋ง์ ์๊ฐ๊ณผ ์์์ด ๋ฌ๋ผ์ง ๊ฒ์ธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฃผ์ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ์ฒ : habr.com