*๋ฌผ๋ก ๊ธฐ๊ณ ํ์ต์ ๊ณต๋ถํ๊ธฐ ์ํด์๋ง. ์ฌ๋ํ๋ ์๋ด์ ์ฝ๊ฐ ๋ถ์พํ ์์ ์๋.
ํด๋๋งํผ ์ฒ์ถ๋ฐ์ฌ ์์ค๊น์ง ๊ฐ๋จํ ์ ์ฉ์ ์๋ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ค๋ฉด ํ ์๊ฐ๋ฝ์ผ๋ก ์ค ์์ดํํ๊ณ ์ผ๋ถ ๋ด๋ฐ์ผ๋ก ๊ฐ์ฅ ์ข์ํ๋ ์๋ ๋๋ ๋จ์ฑ์ ์ ํํ์ญ์์ค. ์์ ์ ํํ ๋ ๋ฌด์ฐจ๋ณ ๋์ ์ ์ด์์ ์ธ ๊ตฌํ.
๋๋ ์ด๊ฒ์ด ์๋ก์ด ๊ทธ๋ํฝ ์นด๋์์ ๊ธฐ๊ณ ํ์ต์ ๋ง์ ์กฐ๊ธ ์ป์ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋จ์ ๊ฒ์ ๋ ๋๊บผ์ด ์ ์ฌ์ฑ์ด ํ์ํ์ง ์์ง๋ง ์ ๊ฒฝ๋ง์ ํ๋ จ์ํค๋ ๊ฒ์ผ ๋ฟ์ด๋ผ๊ณ ์๋ด์๊ฒ ์ค๋ช ํ๋ ๊ฒ์ ๋๋ค.
๋ฐ์ดํธ ๋คํธ์ํฌ์ ๋ฌธ์ ์
๊ทธ๋ฐ ์์์ด์์์ต๋๋ค - Ashley Madison. โ์ธ์์ ์งง๋ค. ๋ฐ๋ํผ๋ค ์ฃผ์ ์ฒญ์ค์ ๋ถ์ ์ ์ฐพ๋ ๊ธฐํผ ๋จ์ฑ์ ๋๋ค. ์์ต ์ฐฝ์ถ๋ ์ฌ๋ฏธ ์์ต๋๋ค. ํ์ค "์ข์์ ๋ฐ ์ฐ๊ธฐ์ ํฌ์ธํธ ์ฌ์ฉ"์ธ์๋ ์ถ์ ์์ด ์ฌ์ฉ์ ๊ณ์ ์ ์ญ์ ํ๊ธฐ ์ํด $ 19๋ฅผ ์์ฒญํ์ต๋๋ค.
2015๋
์ฌ์ดํธ๊ฐ ์์ฐ์ค๋ ์ ์ถ๋๋ฉด์ 60GB์ ๊ฐ์ธ์ ๋ณด๊ฐ ํผ๋ธ๋ฆญ ๋๋ฉ์ธ์ผ๋ก ์ ์ถ๋๋ค. ๋ง์ ํ๊ดด๋ ๊ฐ์กฑ ์ธ์๋ ์ด ์ ์ถ์ ๋ถ์๊ฐ๋ค์๊ฒ ๋ง์ ํฅ๋ฏธ๋ก์ด ์ ๋ณด๋ฅผ ์ ๊ณตํ์ต๋๋ค. ๋๋ ํญ์ ๋ฐ์ดํธ ์ฌ์ดํธ์ ํจ์ฌ ๋ ๋ง์ ๋จ์๋ค์ด ์๋ค๊ณ ์์ฌํ์ง๋ง, ์ด ๊ฒฝ์ฐ ๊ฝค ํฅ๋ฏธ๋ก์ ๋ค. ์ ๋๋ฆฌ ๋ด๋น์ธ ๊ธฐ์
๋จ์ฑ ๊ณ์ ์ ๋ํ ์ด๋ฌํ ์ฐ์ธ๋ ์ด ๋ฆฌ์์ค๋ฟ๋ง ์๋๋ผ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๋ฐ์ดํธ ์ฌ์ดํธ์์๋ ์ผ๋ฐ์ ์ ๋๋ค. ์ง์ธ์ ๋ํด ์ ์คํ๊ฒ ์๊ฐํด์ผํ๊ณ ์๋ ๋ ๋ฑ๋ก ๋งํ๋ฉด๋๋์ด ์์ฌ ํ ์ฌ์ง์์ด ๋ถ๊ณตํ ํ ์ํฉ์ ๋ง์ด ์ ํ์ ๊ฒ์ ๋๋ค. ์ด ํฌ ๊ตฐ์ค์ ์ง์ ์ ์ณ๋๊ณ ์ฌ์ค์ ๋ถ์ธํ ์ ์์ผ๋ฉฐ ์์์ ๊ณต๊ธ์ ๊ท ํ์ด ๋ถ๋ช ํ ์๋ ๋ค์๊ฒ ์ ๋ฆฌํ๊ฒ ์ด๋ํ์ต๋๋ค.
ํด๋ ๊ธฐ๋ฅ
์ ๋ ๊ด๊ณ์์ ์ด์์ ์ธ ๋ฌด์ฐจ๋ณ ๋์
์ด ํ๋ซํผ์ ์ฃผ์ ํน์ง์ ์ง์ธ๋น ์ ๋ ดํ ๋น์ฉ์ ๋๋ค. ๋ ๋ฒ์ ์ค ์์ดํ์ ์ผ์น๋ก ์ถฉ๋ถํ๋ฉฐ ์ด๋ฏธ ์ ์ฌ์ ์ผ๋ก ํฅ๋ฏธ๋ก์ด ์ฌ๋๊ณผ ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๋ ๊ฐ์ ์ฑ๋ณ ๋ถ๊ท ํ์ด ๋๋ถ๋ถ์ ์๋ ๋ค์ด ํ๋ฃจ์ ์์ญ ๊ฐ์ ์ฑ๋ฅ์ ๊ฐ๊ฒ ๋๋ค๋ ์ฌ์ค๋ก ์ด์ด์ง๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ทธ๋ค์ด ๋ค๋ฅธ ํ๋ณด์๋ค ์ฌ์ด์์ ๋น์ ์๊ฒ ๊ด์ฌ์ ๊ธฐ์ธ์ผ ์๊ฐ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํ๋ซํผ์ด ์์๋ณต ์ฐจ๋ฆผ์ ์ฌ์ง์ XNUMX์ด ๋์ ๋ณด๊ฑฐ๋ ํธ๋ ๋ํ ์ฐฉ์ ์๋์ฐจ๋ฅผ ์ด์ ํจ์ผ๋ก์จ ์ฌ๋์ ๊น์ ๋ด๋ฉด ์ธ๊ณ๋ฅผ ํ๊ฐํ ๊ธฐํ๊ฐ ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ๋ถ๋ช
ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ง์์ ๋จ์ํ ์ ์ฑํ๊ฒ ๋ณด์ด์ง ์๋๋ค๋ฉด ์
์์ ํตํด ํ๋ฅ ์ ๋์ผ ์๋ฐ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์์ง
์ฐ์ ์ ์์ ์ธ ์ ํ๋๋ฅผ ์ํด์๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค. ๊ธฐ๊ณ ํ์ต์ ๋ค๋ฃจ์ด ๋ณธ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์กฐํฉ๋๊ณ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๋ ฅํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง ์๊ณ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก Instagram์ด๋ ๋ค๋ฅธ ์์ ๋คํธ์ํฌ์ ๊ฐ์ ์ ์ฌํ ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ ์์ค๋ก ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฏธ๋์ ๋คํธ์ํฌ๊ฐ ์๋ํ ์ํ์ ๋ํด ํ์ตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ ์ฅ์๋ฅผ ๊ธฐ์ด๋ก ์ผ์
from skimage.io import imread, imsave, imshow, show
import matplotlib.pyplot as plt
import pynder
from helpers import get_access_token, get_login_credentials
from io_helper import save_image
email, password, FBID = get_login_credentials()
FBTOKEN = get_access_token(email, password)
session = pynder.Session(facebook_token=FBTOKEN)
while True:
users = session.nearby_users()
for user in users:
photos = user.get_photos()
print("Fetched user photos..")
for photo in photos:
print(photo)
image = imread(photo)
imshow(image)
show()
input_string = "Write 1 to like. Write 2 to dislike."
ans = str(input(input_string)).lower()
if ans == "1":
save_image(image, photo, True)
else:
save_image(image, photo, False)
๋จ ๋ ๊ฐ์ ๋ฒํผ์ผ๋ก ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋งํฌ์ ํ ์ ์์ต๋๋ค. ์ฃผ์ ํจ์ ์ werkzeug ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๊ณ ๊ฐ์ ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Traceback (most recent call last):
File "img_scrape.py", line 4, in <module>
from helpers import get_access_token, get_login_credentials
File "/home/someone/tmp/TinderAutomation/helpers.py", line 1, in <module>
import robobrowser
File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/__init__.py", line 3, in <module>
from .browser import RoboBrowser
File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/browser.py", line 8, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property'
๋ฐ๋ผ์ werkzeug==0.16.1์ requirements.txt์ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ฅํฉ๋๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ๋ ๋ฐ๋ก ์ด ํ ํฐ์ ์ป๋ ๊ฒ์
๋๋ค. ์ ์ฅ์์ ํ์ค ๋ฐฉ๋ฒ์ ๋์๊ฒ ์ ํฉํ์ง ์์์ง๋ง ๊ฐ๋ฐ์ ์ฝ์์์ ์ป์ ์ ์์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ค์์ผ๋ก ์ด๋ํ์ญ์์ค.
๋ฐ์ดํฐ ์ธํธ ์๊ตฌ ์ฌํญ
๊ธฐ๊ณ ํ์ต ๋ฐ์ดํฐ ์ธํธ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค.
- ์ ์
- ์ผ๋ฅ
- ๋ค์์ฑ
์ด ๊ฒฝ์ฐ ์ถฉ๋ถํ๋ ค๋ฉด ์ ์ ํ ๋ชจ๋ธ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ต์ 10000์ฅ์ ์ฌ์ง์ด ํ์ํฉ๋๋ค. ์, ๋ง์ด ์์ต๋๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ์๋น์ค๊ฐ ์์ต๋๋ค.
๋ค์์ฑ์๋ ํน๋ณํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ์ฌ์ง์ ๋ค์ํ ๊ฐ๋์ ์กฐ๋ช ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ์๊ฒฝ, ๋๋ ์ค, ์์๋ณต, ์คํค๋ณต. ๋ฐ์ดํฐ ์ธํธ์ ๊ท ์ผ์ฑ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ์ํ์ ๋งํฌ์ ํ ๋ ๊ฑฐ์ ๋์ผํ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. "๋น๋ค์ด์ง" ๋ฐ์ดํฐ ์ธํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ค์ ์ฌ์ง์ผ๋ก ํฌ์ํด์ผ ํฉ๋๋ค. ๋ ์์ ๊ฒ์ ์ถ๊ฐํด์ผ ํ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋งํฌ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. ๋๋ 60% ๊ท์ฌ์ด ์์ญ์์ ๋ญ๊ฐ๋ฅผ ์ป์๋ค. ๋ด๊ฐ ๋๋ฌด ๊น๋ค๋กญ์ง ์๊ฑฐ๋ ์ด์ด ์ข์์ ์ฃผ๋ณ์ ์์ ์ฌ์๊ฐ ๋ง๋ค.
๋๋ ๋ํ ๊ทธ๋ค ์ฌ์ด์ ๋ง์ ๋ด์ด ์๋ค๋ ๊ฐ์ค์ ๋ฌด์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋ด์ ์ข์ํ ๋ด์ ํ๋ จ์ํต๋๋ค. ์ฌ๊ธฐ์๋ ์ฝ๊ฐ์ ์์ด๋ฌ๋๊ฐ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ
ํ๊ทธ๊ฐ ์ง์ ๋ ์ฌ์ง์ด ๋ง์ด ์์ง๋ง ๋งค์ฐ ํผํฉ๋์ด ์์ต๋๋ค. ๋ฎ, ๋ฐค, ๋ฑ ๋ค์์. ์ ๊ฐ์ค๋ฝ๊ฒ๋ ์ํ์ด ๋งค์ฐ ๊ณ ๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ ๊ฐ๋์์ ์ฌ์ง์ ํ๋ จํ๋ ๊ฒ์ด ํน๋ณํ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ์ข์ ์ ํ์ ์ผ๊ตด์ "์์จ"์ ๊ธฐ์ค ๊ธฐํธ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ฌ์ ํ ์ฐ๋ฆฌ์๊ฒ๋ ๋ค๋ฅธ ์์ฅ๋ฅ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๊ฒ์ด ํต์ฌ ๋งค๊ฐ ๋ณ์์ ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋
๋ํ ์ค๋ช
์์ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค.
๋ค์ ๋จ๊ณ์์๋ ์ํ์ ์ผ๊ตด๋ง ํฌํจ๋ ํ ์์์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ์ค, ์๋ฆ๋ค์ด ํ๋์ ํ๋๋ผ ์ฌ์ฑ๊ณผ ๋ น์ ํผ๋ถ ๋ฏธ์ธ ์ค์์ ์ ํํด์ผ ํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค.
Hue ํผํ์ ๊ฒฝ์ฐ ํผ๋ถ์ ๋งค๊ฐ๋ณ์๋ ๊ท์ฌ์ ์ ์์ ํฌ๊ฒ ๊ธฐ์ฌํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ ๊ฒฝ๋ง์ ์์
์ ๋จ์ํํ๊ณ ๊ทธ๋ ์ด์ค์ผ์ผ๋ง ๋จ๊ฒจ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋ชจ๋ธ ๊ตฌ์ถ
์ข์ ๋น๋์ค ์นด๋์ CUDA๊ฐ ์์ผ๋ฉด ์ ์ ํ ์๊ฐ ๋ด์ ํ๋ จ๋ ๋ชจ๋ธ์ ์ป์ ์ ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์ ์ ๋ฐ๋ก ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ๋ฐ๋ผ์ ํน์ ํด๋ผ์ฐ๋ ๋๋ python-CUDA๋ฅผ ์ฌ์ฉํ์ฌ ์ฆ์ ๊ณ์ฐ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ์์ ๊ธฐ๋ณธ 72๊ณ์ธต ์์ ๋ฅผ ๊ฐ์ ธ์๋๋ฐ ๋๋๊ฒ๋ ์ฝ XNUMX%์ ์ ํ๋๋ฅผ ๋ณด์ฌ ์๋นํ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์์ต๋๋ค.
model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(img_size, img_size, 3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
adam = optimizers.SGD(lr=1e-4, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer= adam,
metrics=['accuracy'])
์ข์ ์ํ์ด ์์ผ๋ฉด ์คํ ๊ฐ๋ฅํ ๋ชจ๋ธ์ ์ป๋ ๋ฐ ์ถฉ๋ถํ ์ ์์ต๋๋ค.
๋ด ์คํ
์์ด๋์ด๋ฅผ ์ ์ํ๊ฒ ํ
์คํธํ ์ ์๋ ๊ธฐ์ฑํ ์ ์ฅ์ ์์ฑ์์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ค์ ๋ก ๊ธฐ๋ณธ ๋ฒ์ ์์ ๋งค์ฐ ์ ์๋ํ๋ฉฐ ์์น์ ์ผ๋ก ๋น์ฌ์์ ์์ํ ์ ์์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
๋๋ ๋งค์ฐ ๊ท์ฌ์ธ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ํ๋ถํ ๋ด๋ฉด ์ธ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ ์๊ฐ ์์ 13๊ฒฝ๊ธฐ ์ง์ญ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ป์์ต๋๋ค. ๋ํ ์๋
๋ค์ด ๋จผ์ ์ฌ๋ฌ ๋ฒ ์ผ์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ๊ธฐ๊ณ ํ์ต๊ณผ ๋ฐ์ดํฐ ๋งํฌ์
๋ง ํ๋ ค๊ณ ์๋ค๋ ์์ฃผ ์ข์ ๋ํ๋ฅผ ์ป์์ต๋๋ค. ์๋
์ค ํ ๋ช
์ ์์ ์ด ๊ฐ๋ฐ์์ด๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง์์ต๋๋ค. ๊ทธ๋
๊ฐ ๊ฒฐ๊ตญ Habrรฉ์์ ์ด ๊ฒ์๋ฌผ์ ์ฝ์ ๊ฒ์ด๋ผ๋ ๊ฐํ ๋๋์ด ์์ต๋๋ค. Oksana๊ฐ ๋ด ์ต๋ช
์ ์ ์งํ๊ธฐ๋ฅผ ์ ๋ง๋ก ๋ฐ๋๋๋ค. ๐
*์์ ํ๋ค๋ฉฐ ์ธ์ฌํ๋ค.
๋ฌธ์ ์ ์ค๋ฆฌ์ ์ธก๋ฉด์ ๋ํด ์กฐ๊ธ
์์งํ ๋งํด์ ๋๋ ๋จ์์ ์ฌ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ก๋ดํํ๋ค๋ ์๊ฐ์ด ์ ํ ๋ง์์ ๋ค์ง ์์ต๋๋ค. ํ๋ก ์ ์๋ ์ผ์ด๋ถ์ ์ด๋ฐฉ์ธ์ ์ด๊นจ์ ์ฌํท์ ๊ฑธ์ณ์ฃผ๋ ๊ฒ์ ๋งค์ฐ ์ณ์ ์ผ์ ๋๋ค. ๋๋ ์ฌ๋ฆ ์นดํ์์ ์์ ์๋ ์๊ฒ ๋ค๊ฐ๊ฐ ํจ๊ป ์ปคํผ๋ฅผ ๋ง์ ๋ค. ๋ชจ๋ํฐ ๋ค์์ ๋๊ฐ์ญ์์ค.
์ฌ๋ฆ์ฏค. ์นํด์ง ์๊ฐ์ ๋๋ค.
์ถ์ฒ : habr.com