dc, ํจ์ฝ, ๋ค์ดํธํ๊ฐ์ ์ปค๋ฎค๋ํฐ์ฌ์ดํธ๋ฅผ ํฌ๋กค๋งํด์ผ ํ ๋๊ฐ ์๋ค. ํ์ง๋ง ๋๋ถ๋ถ์ ์ปค๋ฎค๋ํฐ ์ฌ์ดํธ๋ ๋ช๋ฒ๋ง ๊ธ์ ๊ฐ์ ธ์๋ ip๊ฐ ์ฐจ๋จ๋๋ค. ์ด๋ ํ์ํ ๊ฒ์ด ip์ฐํ๋ค. ๊ฐ์ฅ ์ข๊ณ ์ฌ์ด ๋ฐฉ๋ฒ์ nord vpn ๊ฐ์ ์ ๋ฃ ์ฐํํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋๊ฑฐ์ง๋ง ๋งฅ์ด๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์ด๋ผ๋ฉด ๊ณต์ง์ธ tor๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๋์์ด ๋ ์ ์๋ค. - ์๋์ฐ์์๋ ํด๋ณธ์ ์ด ์์ด ๋ ์ง ์๋ ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์ฝ์ง ์์ ๊ฑฐ ๊ฐ๋ค.
1. ๋จผ์ tor๋ฅผ ์ค์นํ๋ค. ํ์ฐธ๋์ ์ค์นํ๋ค.
- sudo apt install tor [๋ฆฌ๋ ์ค]
- brew install tor [๋งฅ]
2. ํฐ๋ฏธ๋์์ tor๋ฅผ ์คํํ๋ค. ์ด์ tor๋ 9050ํฌํธ๋ฅผ ์ด์ฉํด ํต์ ํ๋ค.
3. ์๋์ ์๋ ip๋ฅผ ์ฐํํด์ ํจ์ฝ(fmkorea.com)์ ๋ฉ์ธ ํ์ด์ง ๊ธ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ์ฝ๋๋ค.
- ํ์ด์ดํญ์ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํ๋ค.
- ์ฒ์ ์ ์ ํ 10์ด๋ฅผ ์ฌ๋ ์ด์ ๋ ํจ์ฝ์ ๊ฒฝ์ฐ ์ฒซ ์ ์์ redirect๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฑด ์ฌ์ดํธ๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ง๊ฒ ์์ ์ด ํ์ํ๋ค.
import re, time
from selenium import webdriver
from bs4 import BeautifulSoup
HOME = 'https://fmkorea.com'
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "127.0.0.1")
profile.set_preference("network.proxy.socks_port", 9050)
profile.update_preferences()
driver = webdriver.Firefox(profile)
driver.get(HOME)
time.sleep(10)
driver.get('https://www.fmkorea.com/index.php?mid=best&page=1')
html = driver.page_source # ํ์ด์ง ์์ค์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select(".li_best2_pop0 ")
for articles in articles:
voted_count = articles.select('.count')[0].text.strip() # ์ถ์ฒ์
title = articles.select('.hotdeal_var8')[0]
comment_count = title.find('span').text[1:].replace(']','') # ๋๊ธ์
title.find('span').decompose()# ์์ ํ๊ทธ์ธ spanํ๊ทธ๋ฅผ ํ๊ดดํ๋ค
href = HOME + title['href']
title = title.text.strip() # ์ ๋ชฉ
title = re.sub(r"[^\uAC00-\uD7A30-9a-zA-Z\s]", "_", title) # ํน์๋ฌธ์ _๋ก ๋ณ๊ฒฝ
category = articles.select('.category > a:nth-child(1)')[0].text.strip() # ์นดํ
๊ณ ๋ฆฌ
author = articles.select('.author')[0].text[2:].strip() # ๊ธ์ด์ด. ์์ ์ฐ๋ ๊ธฐ ๋ฌธ์ ์ ๊ฑฐํ ๊ฐ์ ธ์ด
date = articles.select('.regdate')[0].text.strip() # ๋ ์ง
output_obj = { "title": title, "href": href,"voted_count": voted_count, "comment_count": comment_count, "category": category, "author": author, "date": date }
print(output_obj)
driver.quit()
4. ์คํํด๋ณธ๋ค. ์๋๋ค.
5. ๊ฒฐ๋ก
- ํด๋น ์ปค๋ฎค๋ํฐ์ robot.txt๋ฅผ ์ดํ ํ ๊ทธ์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ทจํฉํด์ผ ํ๋ค.
- ํด๋น ์ปค๋ฎค๋ํฐ์ ์๋ฒ์ ๋ถํ๊ฐ ๊ฐ์ง์๋๋ก ์ถฉ๋ถํ sleep์ ์ฃผ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. tor์์ ์ ๊ณตํ๋ ip์๋ ํ๊ณ๊ฐ ์์ผ๋ฏ๋ก ์ฐํํ๋๋ผ๋ ip์ฐจ๋จ์ ๋นํ ์ ์๋ค.
- ์ฃผ์ ์ปค๋ฎค๋ํฐ ์ฌ์ดํธ๋ค์ ๋ณด์์ด ๊ฐ๋ ฅํด ํฌ๋กค๋ง์ด ์ฝ์ง ์๋ค. ๊ตฌ์กฐ๊ฐ ์์ฃผ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์ ์ฝ๋๊ฐ ๊ฐ์๊ธฐ ์๋ ์๋ ์๋ ์๋ค. ๋ฒ์ ์ธ ๋ฌธ์ ๊ฐ ์๊ธธ์๋ ์๋ค. ๊ทธ๋ฌ๋ ๋ฑ ํ์ํ ๋งํผ๋ง ์ฒ์ฒํ ์ทจํฉํด์ผ ํ๋ค.