정보
-
업무명 : 파이썬으로 인스타그램 헤시태그 검색 기반 크롤링 프로그램
-
작성자 : 박진만
-
작성일 : 2020-12-05
-
설 명 :
-
수정이력 :
내용
[개요]
-
안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.
-
다년간 축적된 경험 (기상학 학술 보고서 및 국/영문 학술 논문 게재, 블로그 운영, IT 회사 웹 개발 담당) 및 노하우를 바탕으로 개개인에게 맞춤형 솔루션을 수행할 수 있습니다.
-
특히 재능 플랫폼 (크몽, 오투잡, 해피캠퍼스, 레포트 월드)에서 누구보다도 경쟁력 있는 가격으로 양질의 서비스를 제공하고 있습니다.
-
아스키 형식의 텍스트 (text) 파일부터 과학자료 형식 (HDF, H5, NetCDF, Grib, Grb) 및 Data Base (DB) 자료까지 다양한 형태의 자료를 이용하여 수집, 전처리, 분석, 시각화해 드립니다.
-
또한 웹 사이트에 대한 정보를 이용한 웹 크롤링 및 그에 따른 엑셀 및 DB 구축도 가능합니다.
-
아울러 기초 통계 (빈도분포, Prired t-test, Wilcoxn 등)에서 지도/비지도 학습을 통한 회귀모형 구축에 이르기 까지 효율적인 통계 정보를 제공합니다.
-
최근 대한민국의 후속위성인 천리안위성 2A호 웹 서비스 서브시스템 및 환경위성 2B호 통합 자료처리 서브시스템에 대한 웹 개발을 수행하였습니다.
-
-
그리고 해솔 블로그에서는 다양한 기상학/천문학 정보와 더불어 사무 자동화/프로그래밍 언어를 소개하오니 방문 부탁드립니다.
-
좋은 하루 보내세요.
[재능플랫폼] 오투잡
[재능플랫폼] 크몽
요청
[세부 사항]
-
파이썬을 이용하여 특정 검색어를 키워드로 하여 인스타그램의 게시물을 크롤링 하는 프로그램
완료
[사용 OS]
-
Windows 10
[사용 언어]
-
Python 3.7
[소스 코드]
import datetime
import time
import re
################################### 함수 ###########################################
#함수 작성
def insta_searching(word): #word라는 매개변수를 받는 insta_searching 이라는 함수 생성
url = 'https://www.instagram.com/explore/tags/' + word
return url
def select_first(driver):
first = driver.find_element_by_css_selector('div._9AhH0')
#find_element_by_css_selector 함수를 사용해 요소 찾기
first.click()
time.sleep(3) #로딩을 위해 3초 대기
#본문 내용, 작성 일시, 위치 정보 및 해시태그(#) 추출
def get_content(driver):
# 1. 현재 페이지의 HTML 정보 가져오기
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
# 2. 본문 내용 가져오기
try: #여러 태그중 첫번째([0]) 태그를 선택
content = soup.select('div.C4VMK > span')[0].text
#첫 게시글 본문 내용이 <div class="C4VMK"> 임을 알 수 있다.
#태그명이 div, class명이 C4VMK인 태그 아래에 있는 span 태그를 모두 선택.
except:
content = ' '
# 3. 본문 내용에서 해시태그 가져오기(정규표현식 활용)
tags = re.findall(r'#[^\s#,\\]+', content) # content 변수의 본문 내용 중 #으로 시작하며, #뒤에 연속된 문자(공백이나 #, \ 기호가 아닌 경우)를 모두 찾아 tags 변수에 저장
# 4. 작성 일자 가져오기
try:
date = soup.select('time._1o9PC.Nzb55')[0]['datetime'][:10] #앞에서부터 10자리 글자
except:
date = ''
# 5. 좋아요 수 가져오기
try:
like = soup.select('div.Nm9Fw > button')[0].text[4:-1]
except:
like = 0
# 6. 위치 정보 가져오기
try:
place = soup.select('div.JF9hh')[0].text
except:
place = ''
# 7. 수집한 정보 저장하기
data = [content, date, like, place, tags]
return data
# 다음 게시물로 이동
def move_next(driver):
right = driver.find_element_by_css_selector('a._65Bje.coreSpriteRightPaginationArrow')
right.click()
time.sleep(3)
################################### 본문 ###########################################
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import re
import pandas as pd
driver = webdriver.Chrome("./chromedriver.exe")
word = '마라탕'
url = insta_searching(word)
driver.get(url)
time.sleep(4)
#2. 로그인 하기
login_section = '//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/span/a[1]/button'
driver.find_element_by_xpath(login_section).click()
time.sleep(3)
elem_login = driver.find_element_by_name("username")
elem_login.clear()
elem_login.send_keys('아이디')
elem_login = driver.find_element_by_name('password')
elem_login.clear()
elem_login.send_keys('비밀번호')
time.sleep(1)
xpath = '//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div/div[3]/button'
#xpath = '//*[@id="react-root"]/section/main/article/div[2]/div[1]/div/form/div/div[3]/button'
driver.find_element_by_xpath(xpath).click()
time.sleep(4)
xpath1 = """//*[@id="react-root"]/section/main/div/div/div/div/button"""
driver.find_element_by_xpath(xpath1).click()
time.sleep(4)
#3. 검색페이지 접속하기
driver.get(url)
time.sleep(4)
#4. 첫번째 게시글 열기
select_first(driver)
#5. 비어있는 변수(results) 만들기
results = []
#여러 게시물 크롤링하기
target = 5000 #크롤링할 게시물 수
for i in range(target):
data = get_content(driver) #게시물 정보 가져오기
df = pd.DataFrame(data=data)
df.to_csv('./out.csv',mode='a',header = True)
move_next(driver)
[결과물]
-
수집 결과
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'자기계발 > 재능상품' 카테고리의 다른 글
[재능상품] R을 통한 지니계수 계산 및 시각화 (0) | 2020.12.06 |
---|---|
[재능상품] R을 통한 The Locus for Focus 모형을 이용한 설문조사 결과 시각화 및 워드 클라우드 생성 (0) | 2020.12.06 |
[재능상품] 특정 지점의 위치 좌표가 주어졌을 때 해당 좌표의 고도 구하기 (0) | 2020.12.05 |
[재능상품] Python을 이용한 웹 크롤링 및 워드 클라우드 시각화 (0) | 2020.12.02 |
[재능상품] 리눅스 쉘 스크립트를 이용한 사용자 요구사항 (0) | 2020.12.01 |
최근댓글