Automation

[네이버 블로그 자동화 - 1] 기본설정과 블로그 읽기

zamezzz 2024. 10. 24. 18:30

[네이버 블로그 자동화 - 1] 기본설정과 블로그 읽기

 

첫 번째로는 기본 설정과 블로그 읽기에 대해 작성해보겠습니다.

 

좋아요 자동화나 댓글 자동화 전에 꼭 해야 할 일입니다.

 

python Interpreter을 세팅하고, 그에 맞는 라이브러리까지 설정해야 합니다.

그리고 특정 키워드를 가진 블로그를 읽어오는 것 까지를 진행하겠습니다.

 

python 3.9 버전을 사용했고, 먼저 아래 라이브러리를 사용했습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time

 

기본적으로 웹 페이지를 띄우고 행동하기 위한 selenium 과 중간중간 사람처럼 보이기 위한 sleep을 위해 time을 import 했습니다.

 

다음으로 기본적은 selenium 설정은 다음과 같습니다.

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

 

  • --headlss 옵션은 크롬 브라우저 창을 열지 않고 실행하기 위한 명령어입니다. 
    • 혹시나 크롬 브라우저를 띄우고 진행하는 내용을 보고 싶으시다면 해당 옵션은 제거해주세요
  • --no-sandbox 옵션은 샌드박스기능을 끄는 명령어입니다.
    • 샌드박스 기능은 브라우저의 각 탭이 별도 프로세스로 돌게하는 기능인데, 이를 끄는 것이죠.(각 탭이 별도 브라우저 처럼 동작)
  • --disable-dev-shm-usage 옵션은 공유 메모리 관련 기능을 끄는 명령어입니다.

이 설정들이 selenium을 사용해 크롬 브라우저를 동작시킬때 원활하게 하기 위한 몇 가지 기본 설정이라 봐주시면 됩니다.

 

이제 기본 설정이 끝났으니, 실제 블로그를 긁어보겠습니다. get_blog_links라는 함수를 만듭니다.

def get_blog_links():
    search_url = "https://section.blog.naver.com/Search/Post.naver?pageNo=1&rangeType=ALL&orderBy=sim&keyword=%EB%8F%99%EB%AC%BC%EC%9B%90"
    driver.get(search_url)
    time.sleep(3)
    return [element.get_attribute('href') for element in driver.find_elements(By.CSS_SELECTOR, 'a.desc_inner') if
            element.get_attribute('href')]

 

search_url은 블로그에서 '동물원' 이라는 키워드를 검색한 페이지 링크입니다.

다음과 같은 화면의 페이지 입니다. 이를 가져와서 각 리스트의 링크를 추출하는 역할을 합니다.

(현재는 1page만 가져오나, 추후 페이징되는 범위를 넓혀보겠습니다)

 

다음으로는 가져온 각 블로그 링크의 본문을 긁어오는 함수인 get_blog_content()를 만들어보겠습니다.

def get_blog_content(blog_url):
    driver.get(blog_url)
    time.sleep(2)
    try:
        driver.switch_to.frame('mainFrame')
        content = driver.find_element(By.CSS_SELECTOR, '.se-main-container').text
        driver.switch_to.default_content()  
        return content
    except Exception as e:
        print(f" Fail : {e}")
        driver.switch_to.default_content()
        return None

 

이 때도 중간에 역시 일부 sleep을 주었습니다.

 

중간에 메인프레임으로 전환하는 코드가 있는데요. 이는 우리가 본문을 가져 올 때 메인프레임에서 해당 데이터를 가져와야 하기 때문입니다. content를 잘 가져 왔으면 해당 content값을 반환하는 아주 간단한 코드입니다.

 

마지막으로는 위 코드들을 실행해보고, 결과를 살펴보겠습니다

blog_links = get_blog_links()

for link in blog_links:
    blog_content = get_blog_content(link)
    print(blog_content)

driver.quit()

 

처음 넣은 키워드의 링크들을 가져오고, 각 링크별로 본문을 가져옵니다.

그리고 이를 출력합니다. 

 

예시) 더운 날씨가 풀리고 외출의 계절이 왔습니다....

 

모든 프로세스가 끝나면 크롬 드라이버를 종료시킵니다.

 

이렇게 오늘 간단하게 코드를 작성해보았습니다.

 

이 과정까지가 끝나면 다음 결과를 얻을 수 있습니다.

- 내가 원하는 키워드의 상위 블로그 링크

- 각 블로그의 본문

 

본문은 얻어서 무엇을 하느냐 하실 수 있는데, 이는 추후 맞춤형 댓글들을 위해 필요할 것 같아 우선 수집했습니다.

 

그럼 오늘의 글은 여기서 마치겠습니다.

피드백 주실 부분이 있다면 부탁드립니다. 감사합니다.

 

 

반응형