ABOUT ME

-

  • 문자로 된 티스토리 블로그 주소(포스트 주소) 파이썬 크롤링 방법
    코딩 연습/파이썬 크롤링 2022. 6. 9. 21:52

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

     

     

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

    문자로 된 티스토리 블로그 주소는 "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.
    .
    .

     

    [저장된 엑셀 파일]

    엑셀 파일
    엑셀 파일

     

     

Designed by goodthings4me.