반응형

     정보

    • 업무명     : 파이썬으로 인스타그램 헤시태그 검색 기반 크롤링 프로그램

    • 작성자     : 박진만

    • 작성일     : 2020-12-05

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

    • 다년간 축적된 경험 (기상학 학술 보고서 및 국/영문 학술 논문 게재, 블로그 운영, IT 회사 웹 개발 담당) 및 노하우를 바탕으로 개개인에게 맞춤형 솔루션을 수행할 수 있습니다.

    • 특히 재능 플랫폼 (크몽, 오투잡, 해피캠퍼스, 레포트 월드)에서 누구보다도 경쟁력 있는 가격으로 양질의 서비스를 제공하고 있습니다.

      • 아스키 형식의 텍스트 (text) 파일부터 과학자료 형식 (HDF, H5, NetCDF, Grib, Grb) 및 Data Base (DB) 자료까지 다양한 형태의 자료를 이용하여 수집, 전처리, 분석, 시각화해 드립니다.

      • 또한 웹 사이트에 대한 정보를 이용한 웹 크롤링 및 그에 따른 엑셀 및 DB 구축도 가능합니다.

      • 아울러 기초 통계 (빈도분포, Prired t-test, Wilcoxn 등)에서 지도/비지도 학습을 통한 회귀모형 구축에 이르기 까지 효율적인 통계 정보를 제공합니다.

      • 최근 대한민국의 후속위성인 천리안위성 2A호 웹 서비스 서브시스템 및 환경위성 2B호 통합 자료처리 서브시스템에 대한 웹 개발을 수행하였습니다.

    • 그리고 해솔 블로그에서는 다양한 기상학/천문학 정보와 더불어 사무 자동화/프로그래밍 언어를 소개하오니 방문 부탁드립니다.

    • 좋은 하루 보내세요.

     

    [재능플랫폼] 오투잡

     

    [IT개발 - 응용프로그래밍] 통계 분석, 데이터 분석, 시각화를 성실하게 해 드립니다. - 재능마켓 �

    판매가격:10,000원, [소개] - 데이터산업진흥원 데이터 가공 공급기업 선정 - 정보통신산업 진흥원 데이터 가공 공급기업 선정 - 다년간 축적된 경험 노하우를 바탕으로 개개인에게 맞춤형 솔루션�

    www.otwojob.com

     

    [재능플랫폼] 크몽

     

    데이터수집, 파싱, 크롤링 해 드립니다. | 50,000원부터 시작 가능한 총 평점 0점의 IT·프로그래밍,

    0개 총 작업 개수 완료한 총 평점 0점인 shlee1990의 IT·프로그래밍, 데이터분석·리포트, 데이터 마이닝·크롤링 서비스를 0개의 리뷰와 함께 확인해 보세요. IT·프로그래밍, 데이터분석·리포트, 데

    kmong.com

     

     요청

    [세부 사항]

    • 파이썬을 이용하여 특정 검색어를 키워드로 하여 인스타그램의 게시물을 크롤링 하는 프로그램

     완료

    [사용 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
     
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기