ABOUT ME

IT와 컴퓨터 관련 팁, 파이썬 등과 아파트 정보, 일상적인 경험 등의 생활 정보를 정리해서 올리는 개인 블로그

  • 네이버 블로그 제목 리스트 추출해보기
    코딩 연습/파이썬 크롤링 2022. 8. 23. 22:47

    네이버 블로그의 제목 리스트 전체를 추출하는 파이썬 크롤링 코드임. 블로그 아이디와 추출할 페이지수(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
    .....

     

Designed by goodthings4me.