[Python] 내 블로그 포스팅 제목 모두 가져오기(티스토리 api)

반응형
    반응형

    내 블로그의 모든 포스트 제목을 가져오는 방법입니다.
    티스토리에서 포스팅 주소는 url 주소가 번호나 제목이 입력되서 나옵니다. 숫자로 포스팅이 발행하는 경우 단순하게 맨 앞 숫자와 맨 뒷 숫자까지 하나씩 입력해서 가져오면 되는거 아닌가? 라고 생각할 수 있지만 블로그를 작성하다보면 본의 아니게 삭제하는 글도 생기기 때문에 번호가 누락되는 경우가 있습니다. 제목도 일일히 수동으로 가져오는 것은 번거로운 일이기도 하죠.이럴 때 티스토리 api를 이용하면 굉장히 편하게 가져올 수 있습니다. 다만, 코딩을 조금 할 줄 알아야 합니다.

    파이썬으로 포스팅 제목을 가져오는 과정을 보여드리겠습니다.
    먼저 티스토리 api가 신청되어 있는 상태가 되어야 하는데 혹시 api 신청을 안했다면 다음 포스팅을 참고하시기 바랍니다.

    블로그 제목 가져오기

    api는 기업에서 제공하는 데이터이므로 기업만의 룰이 있습니다. 이 룰을 따라야만 데이터를 얻을 수 있습니다. 티스토리 공식 문서에도 나와있듯이 주어진 정보를 전달해주어야만 데이터를 제공하게 됩니다.
    티스토리 open api 공식문서에서 글목록 api를 살펴보면 4가지 정보를 넣어주어야 한다고 되어있습니다.

    • access_token : access_token
    • output_type
    • blogName : 블로그를 구분하는 식별자, 티스토리주소 xxx.tistory.com 에서 xxx 부분
    • page : 페이지 번호

    output_type 은 언급이 없으므로 필수사항은 아닌 것 같습니다. 그럼 3가지를 넣어주어야 하는데 마지막 페이지 번호를 알 수가 없습니다. 따라서 어떤 정보가 나오는지 확인한 후 해봐야겠습니다.
    get 방식으로 가져올 수 있으니 requests를 이용해 api 연결을 시행합니다.

    import requests
    import json
    import pandas as pd
    from bs4 import BeautifulSoup
    
    access_token= 'access_token'
    blogName = 'blogName'
    
    # 1페이지 불러오기
    ad = f'https://www.tistory.com/apis/post/list?access_token={access_token}&output=output_type  &blogName={blog_name}  &page={1}'
    resp = requests.get(ad)
    soup = BeautifulSoup(resp.text)
    soup

    api 연결 및 제목 가져오기

    위 그림처럼 제목과 글 번호가 나옵니다. 만약 페이지가 없다면 제목이나 글번호가 나타나지 않을 것입니다. 따라서, 페이지를 넘겼는데 제목이 없다면 멈추게끔 한다면 큰 문제없이 목록을 가져올 수 있을 것 같습니다.

    함수 정의

    위 내용을 함수로 정의하겠습니다.
    리스트로 반환하게 해보았습니다.

    def all_post_with_link(blog_name,page_number=1):
        content = []
    
        while True:
            ad = f'https://www.tistory.com/apis/post/list?access_token={access_token}&output=output_type  &blogName={blog_name}  &page={page_number}'
            resp = requests.get(ad)
            soup = BeautifulSoup(resp.text)
            if len(soup.select('title'))>0:
                for index in range(len(soup.select('title'))):
                    content.append(soup.select('title')[index].get_text())
                page_number += 1
            else:
                break
        return content

    적용을 시키면 다음과 같이 나옵니다.

    content = all_post_with_link(blog_name,1)
    content

    티스토리 포스팅 제목 리스트 반환

    마치며

    블로그 포스팅 제목을 가져오는 방법에 대해 알아보았습니다.
    공식문서에 보면 다 나와있으니 다양한 작업을 할 수 있을겁니다.

    관련 포스팅
    requests 모듈(get 방식 크롤링)
    티스토리 api access key 발급하기
    티스토리 open api 공식문서

    댓글

    Designed by JB FACTORY

    ....