본문 바로가기
코딩 연습/파이썬 크롤링

문자로 된 티스토리 블로그 주소(포스트 주소) 파이썬 크롤링 방법

by good4me 2022. 6. 9.

goodthings4me.tistory.com

티스토리 블로그 글의 주소는 숫자와 문자로 설정할 수 있다. 제목이 문자로 된 블로그 주소에 대해 파이썬으로 크롤링하는 방법을 알아보려고 한다. 

 

 

파이썬으로 문자로 된 블로그 주소의 제목 등 크롤링해보기

문자로 된 티스토리 블로그 주소는 "https://블로그아이디.tistory.com/entry/글제목" 형식으로 표시가 된다. 

티스토리 블로그의 제목을 추출하기 위해 "Category"(또는 "분류 전체보기")를 클릭하던지 아니면 직접 "https://블로그아이
디.tistory.com/category"를 URL로 입력하면 하단의 페이지 번호(pagination)와 함께 블로그 글 목록(리스트)을 볼 수 있다. 

개발자 도구(F12)로 그 목록 부분을 확인해보면 <a> 태그에 블로그 글이 링크되어있다.

 

티스토리 블로그 개발자도구(F12)
티스토리 블로그 개발자도구(F12)

 

  • 해당 링크를 클릭하면 블로그 페이지로 이동되고 블로그 내용을 볼 수 있는데 그 페이지에서 제목과 해당 글의 카테고리, 등록일자 등을 추출할 수 있다.

 

개발자도구(F12)
개발자도구(F12)

  • 즉, 페이지 번호가 있는 곳에서 for 문으로 페이지 번호를 변경하면서 순환시키고, 그 안에서 다시 for 문으로 각 페이지의 글 목록(<a href="블로그 주소">)을 순환시키면서 블로그 페이지의 데이터를 추출하면 된다.

 

[파이썬 크롤링 소스 코드]

import requests
from bs4 import BeautifulSoup
import openpyxl


def get_tistoryTitle(pages):

    ## 추출한 티스토리 데이터 저장할 엑셀
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.cell(1, 1).value = 'page_no'
    ws.cell(1, 2).value = 'category'
    ws.cell(1, 3).value = 'title'
    ws.cell(1, 4).value = 'regist_date'
    ws.cell(1, 5).value = 'post_url'
    wb.save('tistory_title.xlsx')

    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
            (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
    }

    row = 2
    for page_no in range(1, pages + 1):
        url = f'https://4u4u.tistory.com/category/?page={page_no}'
        r1 = requests.get(url, headers=header)
        soup = BeautifulSoup(r1.text, 'html.parser')

        # 해당 페이지 내의 전체 포스트(글)
        posts = soup.select('#content > div.inner > div.post-item > a')
        print(f'전체 포스팅(글)수 : {len(posts)}')

        for post in posts:
            posts_url = 'https://4u4u.tistory.com' + post['href']
            # print(posts_url)

            r2 = requests.get(posts_url, headers=header)
            soup2 = BeautifulSoup(r2.text, 'html.parser')

            category = soup2.select_one('#content > div.inner > div.post-cover > div > span.category')

            # 카테고리가 없을 경우
            if not category:
                category = ''
            else:
                category = category.text.strip()

            # 블로그 제목
            title = soup2.select_one('#content > div.inner > div.post-cover > div > h1')

            # 등록일자
            regi_date = soup2.select_one('#content > div.inner > div.post-cover > div > span.meta > span.date')

            # 타이틀이나 등록일자가 아닌 경우
            if not title or not regi_date:
                continue
            
            print(page_no)
            print(category)
            print(title.text.strip())
            print(regi_date.text.strip())

            ## 엑셀 저장
            ws.cell(row, 1).value = page_no
            ws.cell(row, 2).value = category
            ws.cell(row, 3).value = title.text.strip()
            ws.cell(row, 4).value = regi_date.text.strip()
            ws.cell(row, 5).value = f'=HYPERLINK("{posts_url}", "{posts_url}")'
            wb.save('tistory_title.xlsx')
            row += 1

    wb.close()


if __name__ == '__main__':
    total_pages = 1
    get_tistoryTitle(total_pages)
  • 전체 몇 페이지인지 확인 후 total_pages = 00 변경하면 전체 블로그 글의 제목 등의 데이터를 추출할 수 있다.

 

good4me.co.kr

 

[실행 결과]

전체 포스팅(글)수 : 10
1
Python/Crawling
티스토리 블로그 글 제목 추출 후 구글 사용자 유입 건수 대입
해보기
2022. 2. 4.
1
Python/Crawling
파이썬 스크래핑(크롤링) 데이터 sqlite3에 저장하기
2022. 1. 14.
1
Python/Crawling
11번가 실시간 쇼핑 검색어 추출해보기[with 파이썬]
2022. 1. 10.
1
Python/Etc
VS Code 파이썬 가상환경 만들어서 사용하기
2022. 1. 9.
.
.

 

[저장된 엑셀 파일]

엑셀 파일
엑셀 파일

 

 

댓글