Showing
7 changed files
with
59 additions
and
13 deletions
... | @@ -7,8 +7,11 @@ | ... | @@ -7,8 +7,11 @@ |
7 | </component> | 7 | </component> |
8 | <component name="NewModuleRootManager" inherit-compiler-output="true"> | 8 | <component name="NewModuleRootManager" inherit-compiler-output="true"> |
9 | <exclude-output /> | 9 | <exclude-output /> |
10 | - <content url="file://$MODULE_DIR$" /> | 10 | + <content url="file://$MODULE_DIR$"> |
11 | - <orderEntry type="inheritedJdk" /> | 11 | + <excludeFolder url="file://$MODULE_DIR$/venv" /> |
12 | + <excludeFolder url="file://$MODULE_DIR$/venv3" /> | ||
13 | + </content> | ||
14 | + <orderEntry type="jdk" jdkName="Python 3.8 (venv3)" jdkType="Python SDK" /> | ||
12 | <orderEntry type="sourceFolder" forTests="false" /> | 15 | <orderEntry type="sourceFolder" forTests="false" /> |
13 | </component> | 16 | </component> |
14 | </module> | 17 | </module> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project version="4"> | 2 | <project version="4"> |
3 | - <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK"> | 3 | + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (venv3)" project-jdk-type="Python SDK" /> |
4 | - <output url="file://$PROJECT_DIR$/out" /> | ||
5 | - </component> | ||
6 | </project> | 4 | </project> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
config/URLs.py
0 → 100644
1 | +INSTAGRAM_URL="https://instagram.com" | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
crawler/__init__.py
0 → 100644
File mode changed
1 | +import time | ||
1 | import selenium | 2 | import selenium |
2 | from selenium import webdriver | 3 | from selenium import webdriver |
4 | +from selenium.webdriver.common.keys import Keys | ||
5 | +from config.admin import ID, PW | ||
6 | +from config.URLs import INSTAGRAM_URL | ||
3 | 7 | ||
4 | -BASE_URL = "https://instagram.com" | 8 | + |
9 | +def login(driver): | ||
10 | + elem = driver.find_elements_by_css_selector('._9GP1n .f0n8F ._2hvTZ') | ||
11 | + elem[0].send_keys(ID) | ||
12 | + elem[1].send_keys(PW) | ||
13 | + | ||
14 | + elem[1].send_keys(Keys.RETURN) | ||
15 | + time.sleep(1) | ||
16 | + | ||
17 | +def get_list(insta_id, driver): | ||
18 | + navigations = driver.find_elements_by_class_name('-nal3') | ||
19 | + | ||
20 | + navigations[1].click() | ||
5 | 21 | ||
6 | 22 | ||
7 | def crawler_instagram(insta_id): | 23 | def crawler_instagram(insta_id): |
8 | driver = webdriver.Chrome(executable_path='./chromedriver') | 24 | driver = webdriver.Chrome(executable_path='./chromedriver') |
25 | + driver.get(url=INSTAGRAM_URL) | ||
26 | + time.sleep(4) | ||
27 | + | ||
28 | + login(driver) | ||
29 | + time.sleep(5) | ||
30 | + | ||
31 | + url="%s/%s"%(INSTAGRAM_URL, insta_id) | ||
32 | + driver.get(url=url) | ||
33 | + time.sleep(2) | ||
34 | + | ||
35 | + try: | ||
36 | + isPrivate = driver.find_element_by_class_name('rkEop').text | ||
37 | + except Exception as e: | ||
38 | + isPrivate = "" | ||
39 | + pass | ||
40 | + | ||
41 | + # 비공개 계정인 경우 | ||
42 | + if isPrivate: | ||
43 | + print('private!!') | ||
44 | + # 공개 계정인 경우 | ||
45 | + else: | ||
46 | + nav = get_list(insta_id, driver) | ||
47 | + time.sleep(2) | ||
9 | 48 | ||
10 | - URL = "%s/%s" % (BASE_URL, insta_id) | ||
11 | - driver.get(url=URL) | ||
12 | 49 | ||
13 | - sleep(10) | 50 | + # driver.close() |
14 | 51 | ||
15 | - driver.close() | 52 | + return nav |
16 | 53 | ||
17 | 54 | ||
18 | if __name__ == "__main__": | 55 | if __name__ == "__main__": | ... | ... |
1 | import os | 1 | import os |
2 | -from config.firebase import db | ||
3 | from flask import Flask, render_template, request | 2 | from flask import Flask, render_template, request |
4 | 3 | ||
4 | +from config.firebase import db | ||
5 | +from crawler.crawler_instagram import crawler_instagram | ||
6 | + | ||
5 | # data = { | 7 | # data = { |
6 | # "age": 24, | 8 | # "age": 24, |
7 | # "name": "choi", | 9 | # "name": "choi", |
... | @@ -25,8 +27,9 @@ def home(): | ... | @@ -25,8 +27,9 @@ def home(): |
25 | 27 | ||
26 | @app.route("/check", methods=["POST"]) | 28 | @app.route("/check", methods=["POST"]) |
27 | def check(): | 29 | def check(): |
28 | - value = request.form['insta_id'] | 30 | + insta_id = request.form['insta_id'] |
29 | - return value | 31 | + |
32 | + crawler_instagram(insta_id) | ||
30 | 33 | ||
31 | 34 | ||
32 | if __name__ == "__main__": | 35 | if __name__ == "__main__": | ... | ... |
-
Please register or login to post a comment