[python] crawler (instagram)
2021. 5. 1. 19:39ㆍPython/코딩
Ver. Jupyter Notebook (Anaconda3)
▶ crawler_instagram
수집: 사진, 날짜, 좋아요, 태그
코딩: github
JeongJaeyoung0/crawler
Contribute to JeongJaeyoung0/crawler development by creating an account on GitHub.
github.com
2021.05.09
# crawler_instagram
Step 1. 인스타 > 검색어 입력 > 첫번째 검색어 선택 > 사진 클릭 > 데이터 수집
Step 2. 이미지 저장할 폴더 생성 > 이미지 저장
pwd
### step 0. 준비
import pandas as pd
import numpy as np
from selenium import webdriver
from selenium.webdriver import ActionChains as AC
from tqdm import tqdm
from tqdm import tqdm_notebook
import re
from time import sleep
import time
### step 1. 크롤링
# 검색어
keyword = input("크롤링할 키워드를 입력하세요: ")
len_insta = ("크롤링할 글 수를 입력하세요: ")
# 크롬창 띄우기
driver = webdriver.Chrome(r"G:\내 드라이브\exe\chromedriver.exe")
driver.get("https://www.instagram.com/")
time.sleep(2)
수동 로그인
dict = {} # 전체 데이터를 담을 딕셔너리 생성
# 검색창에 커서 클릭
element = driver.find_element_by_css_selector(".pbgfb.Di7vw")
element.click()
time.sleep(1)
# 검색 창에 검색어 입력
element = driver.find_element_by_css_selector(".XTCLo.x3qfX")
element.send_keys(keyword)
time.sleep(3)
# 검색어 리스트 중 첫번째 검색어 클릭
query_list = driver.find_elements_by_css_selector(".-qQT3")
query_list[0].click()
time.sleep(7)
# 사진 클릭
CSS_tran="div.Nnq7C.weEfm" # 사진 버튼 정의
tran_button = driver.find_element_by_css_selector(CSS_tran) # 사진 버튼 찾기
AC(driver).move_to_element(tran_button).click().perform() # 사진 버튼 클릭
time.sleep(1)
# 크롤링 시작
for i in tqdm_notebook(range(0, len_insta)):
target_info = {} # 사진별 데이터를 담을 딕셔너리 생성
try:
# 사진(pic) 크롤링 시작
overlays1 = "div._2dDPU.CkGkG .FFVAD" # 사진창 속 사진
img = driver.find_element_by_css_selector(overlays1) # 사진 선택
pic = img.get_attribute('src') # 사진 url 크롤링 완료
target_info['picture'] = pic
# print(target_info)
# 날짜(date) 크롤링 시작
overlays2 = "div._2dDPU.CkGkG .c-Yi7 > time" # 날짜 지정
datum2 = driver.find_element_by_css_selector(overlays2) # 날짜 선택
date = datum2.get_attribute('title')
# get_attribute('title') # 날짜 크롤링 완료
target_info['date'] = date
# print(target_info)
# print(datalist)
# 좋아요(like) 크롤링 시작
overlays3 = ".Nm9Fw" # 리뷰창 속 날짜
datum3 = driver.find_element_by_css_selector(overlays3) # 리뷰 선택
like = datum3.text # 좋아요 크롤링 완료
target_info['like'] = like
# print(target_info)
# 해시태그(tag) 크롤링 시작
overlays4 = ".C7I1f.X7jCj" # 태그 지정
datum3 = driver.find_element_by_css_selector(overlays4) # 태그 선택
tag_raw = datum3.text
tags = re.findall('#[A-Za-z0-9가-힣]+', tag_raw) # ""#OOO"만 뽑아오기(OOO: 한글,숫자,영어,_)
tag = ''.join(tags).replace("#"," ") # "#" 제거
target_info['tag'] = tag
# print(target_info)
dict[i] = target_info # 토탈 딕셔너리로 만들기
print("{0}".format(i), tag)
# 다음장 클릭
CSS_tran2="a._65Bje.coreSpriteRightPaginationArrow" # 다음 버튼 정의
tran_button2 = driver.find_element_by_css_selector(CSS_tran2) # 다음 버튼 find
AC(driver).move_to_element(tran_button2).click().perform() # 다음 버튼 클릭
time.sleep(2)
except: # 에러가 나면
# 다음장 클릭
CSS_tran2="a._65Bje.coreSpriteRightPaginationArrow" # 다음 버튼 정의
tran_button2 = driver.find_element_by_css_selector(CSS_tran2) # 다음 버튼 find
AC(driver).move_to_element(tran_button2).click().perform() # 다음 버튼 클릭
time.sleep(2)
driver.close()
print(dict)
# 판다스화
import pandas as pd
result_df = pd.DataFrame.from_dict(dict, 'index')
n = result_df['picture'].count()
# 엑셀 저장
result_df.to_excel("insta_({}).xlsx".format(keyword), encoding='euc-kr')
result_df
num_pic = len(result_df['picture'])
num_pic
### step 2. 이미지 저장
# 이미지들 image_insta 폴더에 다운받기
import os
import urllib.request
# 만약 폴더가 없으면 생성
if not os.path.exists("image_insta_"+keyword): #if not () 없으면
os.makedirs("image_insta_"+keyword) # 생성
# 이미지 저장
for i in range(0, 50):
try:
index = result_df['picture'][i]
date = result_df['date'][i]
urllib.request.urlretrieve(index, "image_insta_{0}/{1}_{2}.jpg".format(keyword, i, date))
except:
pass
'Python > 코딩' 카테고리의 다른 글
[python] crawler (소방청 국가화재정보센터) (0) | 2021.05.09 |
---|---|
[python] crawler (공공데이터포털_관광코스별 관광지 상세 날씨 조회서비스_JSON) (0) | 2021.05.01 |
[python] crawler (공공데이터포털_여객터미널실시간 운항정보_XML) (0) | 2021.05.01 |
[python] crawler (naver news) (0) | 2021.05.01 |
[python] crawler (naver blog) (3) | 2021.05.01 |