본문 바로가기
프로젝트/인스타그램 좋아요 봇

파이썬 인스타그램 좋아요 봇 만들기 #12 광고성 글 건너뛰기

by 큰공 2020. 10. 29.
728x90
반응형

개요

 파이썬 자동화 프로그램을 만들어 자동으로 좋아요를 하는 봇을 만들어 보자

 혹시나 앞선 포스팅을 못 봤다면 복습하고 오자.

2020/08/26 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #1 Selenium

2020/08/27 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #2 로그인

2020/08/31 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #3 태그검색

2020/09/02 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #4 좋아요 누르기

2020/09/07 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #5 최근 게시물 선택하기

2020/09/08 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #6 랜덤함수

2020/09/14 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #7 list index out of range

2020/09/17 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #8 페이지 새로고침

2020/10/05 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #9 xpath 찾기

2020/10/08 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #10 이미 좋아요 누른 게시물 패스하기

2020/10/21 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들기 #11 태그 검색 변경하기

 

파이썬 인스타그램 좋아요 봇 만들기 #11 태그 검색 변경하기

개요  파이썬 자동화 프로그램을 만들어 자동으로 좋아요를 하는 봇을 만들어 보자  혹시나 앞선 포스팅을 못 봤다면 복습하고 오자. 2020/08/26 - [IT/파이썬] - 파이썬 인스타그램 좋아요 봇 만들

coinpipe.tistory.com

 

들어가며

 아래 글을 보기 전에 이전글을 보고 와야 아래 내용이 이해하기 쉬우니, 꼭 이전글을 보고 오길 추천한다.

 앞선 코드의 문제점은 광고글도 여전히 좋아요를 누른다는것이다. 매크로를 사용하지 않고, 사람이 직접 좋아요를 누른다면, 광고글은 좋아요를 하지 않을텐데, 하는 아이디어에서 시작한다.

 

 

로직

 1) 인스타그램 게시물 글을 얻을 수 있어야 한다.

 2) 광고성 글이 포함하고 있는 문구를 나열해야 한다.

 3) 게시물 글 중에 광고성 글이 포함되어 있는지 판단해야 한다.

 4) 광고성글이라고 판단되면 좋아요를 스킵하도록 한다.

 

 크게 보면 위와 같은 로직으로 동작한다. 이를 동작하기 위해서는 게시글 얻기, 문자열 검색 방법을 알아야 한다.

 

 

문자열 검색 Find 함수

 파이썬에서는 문자열 검색함수인 find 함수를 제공한다. find 함수의 기본 문법을 알아보자

 str = '검색할 대상이 있는 문자열'
 index = str.find ('검색문자')

 return 값
 -1 : 찾지 못할 경우
 int : 찾은 문자의 위치 (index) 

 

게시물의 xpath 위치 찾기

 게시물의 xpath 위치를 찾는 법을 복습해보자.

 1) 인스타그램 게시물을 선택

 2) 개발자 도구를 켜기

 3) 개발자 도구 상단 왼쪽 영역 선택 부분 선택

 4) 마우스로 게시물의 원하는 영역을 선택한다.

 5) 개발자 도구 탭에서 <span> 영역이 선택확인

 6) <span> 영역을 마우스 오른쪽으로 선택 

 7) copy -> copy to XPath 선택

그럼 아래와 같이 xpath 영역을 추출 할 수 있다.

/html/body/div[4]/div[2]/div/article/div[3]/div[1]/ul/div/li/div/div/div[2]
/html/body/div[4]/div[2]/div/article/div[3]/div[1]/ul/div/li/div/div/div[2]/span
/html/body/div[4]/div[2]/div/article/div[3]/div[1]/ul/ul[1]/div/li/div/div[1]/div[2]/span
/html/body/div[3]/div[2]/div/article/div[3]/div[1]/ul/div/li/div/div/div[2]/span

 테스트 해보니 인스타 게시물에 따라서 해당 영역이 바뀌는 부분도 발견하였다. 총 3가지의 xpath 영역을 가진다고 볼수 있다. (더 있을 수도 있다.)

 

 

완성된 코드

#광고성글이 포함하고 있는 단어 리스트
block_text_list = ['부업', '광고', '협찬' ,'협찬', '재테크', '출금', '공짜', '수익', '카톡', '원금', '할인', '이벤트', '부자', 'Repost', '구매', '예약', '영업', '문의전화', '오시는', '주소' ]

    for a in range(onetime_count):
        time.sleep(3)

        # 글 내용 보고 스킵하기 
        # 게시물 글 부분 찾기
        block_point = False
        
        try : 
            content = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[3]/div[1]/ul/div/li/div/div/div[2]')
        except :
            try :
                content = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[3]/div[1]/ul/ul[1]/div/li/div/div[1]/div[2]/span')
            except :
                try :
                    content = browser.find_element_by_xpath('/html/body/div[3]/div[2]/div/article/div[3]/div[1]/ul/div/li/div/div/div[2]/span')
                except : 
                    print ("excpetion in block text")
                    browser.get(prev_url)
                    break

		# 게시물 글에서 광고성글 단어 포함 여부 확인하기
        for word in block_text_list :
            if content.text.find(word) > 0 :    
                print ( "Skip! block text " + word)
                block_point = True
            	break

        if block_point == False : 
            # 좋아요 누르기
            # 이하생략
            
            
            

 광고성글이 포함하고 있는 단어 문자열을 List 로 가지고 있는다.

 좋아요를 하기 전에, 글 내용을 먼저 파악하기 위해서, 글 내용 xpath 를 얻고, xpath 부분의 여러가지가 있어서 try-except 으로 해당 부분에 예외처리를 해서 해당 xpath 가 없을 경우 다른 xpath를 검색하도록 하며, 3가지 xpath 가 다 없을 경우에 이전 url (태그 검색) 으로 이동한다.

 for 반복문과 find 함수를 이용하여, 게시물 글에서 광고성 단어가 포함되어있는지 확인한다.

 광고성 단어가 포함되어 있을 경우 0 이상의 정수 값을 return 하기 때문에, 0 보다 크면 flag를 true 로 설정하고 좋아요를 하지 않게끔 설정한다.

 

 

맺으며..

 생각보다 광고성글이 많다. 약 1500개의 좋아요를 수행하면 한 100개 정도는 필터링 되어 좋아요를 수행하지 않게된다. 광고성 단어 리스트에 단어를 더 많이 추가하면, 더 좋은 광고성글 필터링을 할 수 있는 매크로가 될 것이다.

 

 

 

 

 

728x90
반응형

댓글0