250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- locals()
- shutil
- shuffle()
- discard()
- glob
- 오버라이딩
- MySQL
- choice()
- JS
- __sub__
- remove()
- __getitem__
- CSS
- 파이썬
- MySqlDB
- decode()
- Database
- View
- items()
- inplace()
- count()
- __annotations__
- HTML
- fnmatch
- randrange()
- __len__
- zipfile
- mro()
- node.js
- fileinput
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(Python) 인스타그램 크롤링 본문
728x90
반응형
In [13]:
import chromedriver_autoinstaller
import time
from selenium import webdriver
from selenium.webdriver.common.by import By # XPath 상수화
In [14]:
driver = webdriver.Chrome()
1. 로그인 하기
In [15]:
driver.implicitly_wait(3)
url='https://www.instagram.com/'
driver.get(url)
id = '아이디'
pw = '비밀번호'
# /html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input
# /html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input
input_id = driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input')
input_pw = driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input')
input_id.send_keys(id)
input_pw.send_keys(pw)
driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]/button').click()
time.sleep(5)
2. 해시태그 검색하기
In [16]:
hashtag = '술스타그램'
url = f'https://www.instagram.com/explore/tags/{hashtag}/'
driver.get(url)
time.sleep(5)
3. 스크롤 내리기
In [19]:
for _ in range(5):
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(5)
4. 원하는 사진 클릭하기
In [24]:
xpath = '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/article/div[2]/div/div[11]/div[3]/a'
driver.find_element(By.XPATH, xpath).click()
time.sleep(3)
5. 좋아요 클릭 및 댓글 달기
In [25]:
like_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[1]/button'
driver.find_element(By.XPATH, like_xpath).click()
time.sleep(1)
In [26]:
comment = '잘보고갑니다!'
comment_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/textarea'
driver.find_element(By.XPATH, comment_xpath).click()
driver.find_element(By.XPATH, comment_xpath).send_keys(comment)
time.sleep(3)
In [27]:
send_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/div[2]/div'
driver.find_element(By.XPATH, send_xpath).click()
time.sleep(3)
In [28]:
next_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/button'
driver.find_element(By.XPATH, next_xpath).click()
time.sleep(3)
6. 함수로 리팩토링
In [38]:
# 로그인
def login(id, pw):
input_id = driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input')
input_pw = driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input')
input_id.send_keys(id)
input_pw.send_keys(pw)
driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]/button').click()
time.sleep(5)
# 해시태그 검색
def search(hashtag, scroll_items):
url = f'https://www.instagram.com/explore/tags/{hashtag}/'
driver.get(url)
time.sleep(5)
for _ in range(scroll_items):
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(5)
# 좋아요 및 댓글달기(어떤사진을 선택할지 index, 댓글, 반복숫자)
def like_and_comment(nth, comment, repeat=1):
row = (nth-1) // 3 + 1
col = (nth-1) % 3 + 1
xpath = f'/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/div[1]/div[2]/section/main/article/div[2]/div/div[{row}]/div[{col}]/a'
driver.find_element(By.XPATH, xpath).click()
time.sleep(3)
for i in range(repeat):
like_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[1]/button'
driver.find_element(By.XPATH, like_xpath).click()
time.sleep(1)
comment_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/textarea'
driver.find_element(By.XPATH, comment_xpath).click()
driver.find_element(By.XPATH, comment_xpath).send_keys(comment)
time.sleep(3)
if i+1 < repeat:
next_xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/button'
driver.find_element(By.XPATH, next_xpath).click()
time.sleep(3)
In [41]:
url='https://www.instagram.com/'
driver.get(url)
id = '아이디'
pw = '비밀번호'
driver.implicitly_wait(3)
login(id, pw)
time.sleep(5)
hashtag = '사과'
search(hashtag, 3)
time.sleep(5)
like_and_comment(10, '잘 보고 갑니다', 3)
728x90
반응형
'파이썬 크롤링' 카테고리의 다른 글
(Python) 픽사베이 이미지 크롤링 (0) | 2023.06.09 |
---|---|
(Python) 셀레니옴 (1) | 2023.06.09 |
(Python) 크롤링 (0) | 2023.06.09 |