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

네이버 블로그 제목 리스트 추출해보기

by good4me 2022. 8. 23.

goodthings4me.tistory.com

네이버 블로그의 제목 리스트 전체를 추출하는 파이썬 크롤링 코드임. 블로그 아이디와 추출할 페이지수(10줄 단위 기준)를 입력하면 블로그 제목, 각 페이지 URL, 등록일을 추출하여 텍스트와 html table 형식으로 저장함

 

 

네이버 블로그 목록 전체 추출하기

본인의 블로그 아이디를 blog_id 변수에 대입하고, 함수 호출 시 인자로 블로그 목록의 페이지(네이버 블로그 목록 하단 페이지 번호의 맨 끝 번호)를 입력한 후 실행하면 된다.

 

[파이썬 소스 코드]

import requests
from bs4 import BeautifulSoup
import re, time, random
from urllib import parse


def naver_blog_list(list_page):
    blog_id = '본인의 블로그 아이디'
    blog_list_txt = ''
    blog_list_html = '<table>'

    count = 0
    for page in range(1, list_page):
        url = f'https://blog.naver.com/PostTitleListAsync.naver?blogId={blog_id}&viewdate=&currentPage={page}&categoryNo=0&parentCategoryNo=&countPerPage=10'
        
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
        }            
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        url_str = parse.unquote(response.text)
        p = re.compile('"logNo":"\d+"')
        logNos = p.findall(url_str)
        blognos = []
        for log in logNos:
            blognos.append(log.split('":"')[1][:-1])
        
        for blog_no in blognos:
            blog_url = f'https://blog.naver.com/PostView.naver?blogId={blog_id}&logNo={blog_no}'
            print(blog_url)
            time.sleep(random.uniform(0.1, 0.5))
            response = requests.get(blog_url, headers=headers)
            soup = BeautifulSoup(response.text, 'html.parser')
            post_body = soup.find('table', id='printPost1')  # find('div', id='postListBody')

            # 제목 추출
            if blog_tit := post_body.find('div', class_= 'pcol1'):
                if blog_tit.find('span'):
                    blog_title = blog_tit.find('span').text.strip().replace('\n', '')
                else:
                    blog_title = blog_tit.find('h3').text.strip().replace('\n', '')
                blog_title = re.sub('"  "|\t|\r|\n\n', '', blog_title).replace(u'\u200b', '')

            # 등록일 추출
            if blog_regist := post_body.find('span', class_= re.compile('^se_publishDate pcol2.*')):
                blog_regist_day = blog_regist.text.strip().replace('\n', '')
                blog_regist_day = re.sub('"  "|\t|\r|\n\n', '', blog_regist_day).replace(u'\u200b', '')
                regiday = blog_regist_day.split('.')
                rday = regiday[0].strip() + '.' + regiday[1].strip() + '.' + regiday[2].strip()
                print(rday)
            
            count += 1
            print(f'순번: {count}\n제목: {blog_title}\n등록일: {blog_regist_day}\n')

            # 텍스트와 html 형식의 문자열 만들기
            blog_list_txt += str(count) + '$' + blog_title + '$' + blog_url + '$' + rday + '\n'
            blog_list_html += f'<tr><td>{count}</td><td><a href="{blog_url}" target="_blank">{blog_title}</a></td><td>{rday}</td></tr>'

    blog_list_html += '</table>'

    print('블로그 제목 리스트 추출 완료!!')

    # html 형식 저장(.txt)
    with open('./naver/naver_blog_list_html.txt', 'w', encoding='utf-8') as f:
        f.write(blog_list_html)

    # 텍스트 형식 저장
    with open('./naver/naver_blog_list.txt', 'w', encoding='utf-8') as f:
        f.write(blog_list_txt)

    print(blog_list_html)
    print(blog_list_txt)
    
naver_blog_list('3')
  • 실행 시 생성되는 파일을 저장할 폴더(./naver)는 실행 전에 만들어야 하고,
  • 생성된 파일 중 naver_blog_list_html.txt을 더블 클릭하여 메모장으로 열고 다른 이름으로 저장을 한 후 확장자를 .html로 변경하면 네이버 블로그 제목 리스트가 브라우저에서 열린다.
  • 그리고, naver_blog_list.txt는 엑셀에서 구분자 '$'로 하여 텍스트 열기로 불어오면 엑셀로 만들어진다.

 

good4me.co.kr

 

[실행 결과 - html table]

<table><tr><td>1</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222854975723" target="_blank">여수샷시 KCC창호로 봉강동 해태동백타운아파트 45평 모든 창문 가격 확인하고 현관 3연동 중문까지 교체했어요</a></td><td>2022.8.22</td></tr><tr><td>2</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222851581304" target="_blank">홈케어 하듯이 샷시교체후 아파트 베란다 유리 창문 닦기 하고 창틀 청소하고 건강한 공간 만들어요</a></td><td>2022.8.18</td></tr><tr><td>3</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222849523598" target="_blank">은평구샷시 현대엘앤씨 창호로 응암동 우성아파트 저층 26평 복도형 샤시와 방범창 교체했어요</a></td><td>2022.8.16</td></tr><tr><td>4</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222846420244" target="_blank">남양주샷시 KCC그린리모델링 가격알고 진접읍 장현주공1단지아파트 31평 외부창과 거실과 방 창호교체 했어요</a></td><td>2022.8.12</td></tr><tr><td>5</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222845459317" target="_blank">탄소배출 줄이는 서울시 건물에너지효율화 BRP 사업으로 8년 무이자 융자 지원 받고 창호교체 집수리 공사하세요</a></td><td>2022.8.11</td></tr><tr><td>6</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222842783207" target="_blank">청주샷시 현대엘앤씨 창호로 유리종류 중 로이유리로 율량동 삼성아파트 23평 발코니 샤시 수리하려다 교체했어요</a></td><td>2022.8.8</td></tr><tr><td>7</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222840147763" target="_blank">아파트나 주택의 베란다를 발코니를 우리집의 또다른 특별한 공간으로 만드는 인테리어 공사 알아보기</a></td><td>2022.8.5</td></tr><tr><td>8</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222838358962" target="_blank">속초샷시를 에너지 효율 등급 높은 국토부 그린 리모델링 KCC창호 뉴프라임으로 아파트 21평 외부 샤시 교체했어요</a></td><td>2022.8.3</td></tr><tr><td>9</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222833665583" target="_blank">여름맞이 휴가철에 원데이 시공인 노후 주택 아파트 샷시교체와 부엌과 화장실이나 거실이나 침실 공사 인테리어해요</a></td><td>2022.7.29</td></tr><tr><td>10</td><td><a href="https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222827880810" target="_blank">누수 피해있는 김해샷시 현대엘앤씨로 외동 임호마을동일드림빌아파트 21평 거주중 외창 내창 모두 창호 교체했어요</a></td><td>2022.7.25</td></tr>
.....

 

 

[실행 결과 -  txt]

1$여수샷시 KCC창호로 봉강동 해태동백타운아파트 45평 모든 창문 가격 확인하고 현관 3연동 중문까지 교체했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222854975723$2022.8.22
2$홈케어 하듯이 샷시교체후 아파트 베란다 유리 창문 닦기 하고 창틀 청소하고 건강한 공간 만들어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222851581304$2022.8.18
3$은평구샷시 현대엘앤씨 창호로 응암동 우성아파트 저층 26평 복도형 샤시와 방범창 교체했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222849523598$2022.8.16
4$남양주샷시 KCC그린리모델링 가격알고 진접읍 장현주공1단지아파트 31평 외부창과 거실과 방 창호교체 했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222846420244$2022.8.12
5$탄소배출 줄이는 서울시 건물에너지효율화 BRP 사업으로 8년 무이자 융자 지원 받고 창호교체 집수리 공사하세요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222845459317$2022.8.11
6$청주샷시 현대엘앤씨 창호로 유리종류 중 로이유리로 율량동 삼성아파트 23평 발코니 샤시 수리하려다 교체했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222842783207$2022.8.8
7$아파트나 주택의 베란다를 발코니를 우리집의 또다른 특별한 공간으로 만드는 인테리어 공사 알아보기$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222840147763$2022.8.5
8$속초샷시를 에너지 효율 등급 높은 국토부 그린 리모델링 KCC창호 뉴프라임으로 아파트 21평 외부 샤시 교체했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222838358962$2022.8.3
9$여름맞이 휴가철에 원데이 시공인 노후 주택 아파트 샷시교체와 부엌과 화장실이나 거실이나 침실 공사 인테리어해요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222833665583$2022.7.29
10$누수 피해있는 김해샷시 현대엘앤씨로 외동 임호마을동일드림빌아파트 21평 거주중 외창 내창 모두 창호 교체했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222827880810$2022.7.25
11$광주 북구 샷시를 KCC로 교체 비용 견적 비교하고 리젠시빌호반2차아파트 에어컨 냉방비 줄어드는 개선 공사했어요$https://blog.naver.com/PostView.naver?blogId=k-esco&logNo=222824225739$2022.7.22
.....

 

댓글