본문 바로가기
Python

[python] 게시판 형식 오래된 사이트 텍스트 추출 크롤링

by 퍼포먼스마케팅코더 2022. 9. 15.
반응형

python 게시판 형식 오래된 사이트 텍스트 추출 크롤링

 

혹시 여러분들 중에 옛날 게시판 형식으로 대해서 많이 가지고 계신가요? 제가 가끔씩 사이트 이런 것들 좋아하는 때보다 약간씩 놀랄 때가 있습니다. 그게 뭐냐면 이렇게 옛날로 되어 있는 사이트들이 굉장히 많습니다. 제가 생각하는 거 이상으로 많습니다. 근데 안타까운 거는 소중한 여러분들의 콘텐츠들이 있지 않습니까? 그런 콘텐츠들을 게시판 이런 곳에다가 많이 업로드를 해두시는 분들도 계시긴 하는데요, 호스팅 서비스가 끝나버리면 말 그대로 사이트가 없어지는 거죠. 그런 수많은 제 사이트들이 많이 없어지고 그런 걸 따로 백업을 안 해놓으시면 그대로 컨텐츠는 없어집니다. 

 

오늘 제가 말씀드릴 파이썬 코딩은 만약 어떠한 사이트가 됐든 오래된 사이트 안에서 게시판에다가 글을 남겨두셨던 분들이 계실 거예요. 특히 오랫동안 어떤 커뮤니티 사이트든 여러분만이 가지고 썼던 컨텐츠를 추출 크롤링할 수 있는 파이썬 코딩을 설명드리고자 합니다. 예를 들면 어떤 특정 아주 오래된 사이트가 있습니다. 오래된 사이트 예시로 잡았어서 제가 보여드리는 겁니다. 한 가지 문제점이 BeautifulSoup로 크롤링을 했을 때 한글이 깨지는 현상이 있어요. 한글이 깨졌을 때는 어떻게 해야 되느냐라는 게 있으면 여기 밑에 주석으로 달아놓은 게 있습니다. 

 

그거를 참고를 하셔서 해보시면 정상적으로 한글이 파이썬 주피터 노트북으로 보시면 출력돼서 나오실 거예요. 그것만 염두를 해두시면 될 것 같고요. 그리고 오래된 게시판이다 보니까 필터링 해야 될 게 많습니다. 필터링 해야 될 것들만 생각을 해 두시고 최종적으로 여러분만의 텍스트로 가공해서 출력하시면 완성입니다. 오늘은 여기까지입니다.

 

그래서 어려우면은 어려울 수도 있고 쉬우면 쉬울 수 있는데 웹 크롤링이나 이러한 것에 익숙하셨던 분이라면 의외로 게시판으로 있는 그런 사이트들이 오히려 더 크롤링하기가 쉬운 경우도 있습니다. 정식으로 계층적인 구조로 html이 돼 있지 않아서 번거로울 수도 있는데 의외로 단순하기도 합니다. 부분만 염두해 두시고 어 여러분들만의 콘텐츠를 즐기는 그런 것에 조금이나마 소폭 도움이 됐으면 합니다.

import requests
from bs4 import BeautifulSoup
import re
import time

url = 'http://www.woorimal.net/language/moonjang/moonjang-menu.htm'  #URL 입력

headers = { 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh;q=0.5',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
            'Accept-Encoding': 'gzip'
}


raw = requests.get(url=url, headers=headers)
#html = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser') #글자 깨질시 content 로 하면 된다 

#html = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser') #글자 깨질시 content 로 하면 된다. 이외 decode로 cp949, euc-kr 로 바꿔 진행

html = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser')  #글자 깨질시 컨텐츠로 하면됨.
#print(html)


results = html.find('td')

#print(results)
munhak_list = results.find_all('a')
#print(munhak_list)
#문학이론

import time

munhak_list = results.find_all('a')

for i in munhak_list[:1] :
    url = i['href']
    url_2 = 'http://www.woorimal.net/hangul/' + str(url)
    text = i.text.strip()
    text = text.replace("\t", "") #필터링
    text = text.replace("\n", "") #필터링
    text = text.replace("\n", "") #필터링
    text = text.replace("  ", "") #필터링
    text = text.replace(":", "") #필터링
    text = text.replace("~", "") #필터링
    text = text.replace("<", "") #필터링
    text = text.replace(">", "") #필터링
    text = text.replace("/", "") #필터링

    print(str(url_2) + ' , ' + str(text))  #완료
    #url = 'http://www.woorimal.net/hangul/munhak-eeron/eeron%201-1.htm'  #문학이론

    headers = { 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh;q=0.5',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
                'Accept-Encoding': 'gzip'
    }


    raw = requests.get(url=url_2, headers=headers)  #세부 페이지 들어가기
    #html = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser') #글자 깨질시 content 로 하면 된다 

    #html = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser') #글자 깨질시 content 로 하면 된다. 이외 decode로 cp949, euc-kr 로 바꿔 진행

    html_detail = BeautifulSoup(raw.content.decode('euc-kr', 'replace'), 'html.parser')  #디테일을 보자
    
    detail = html_detail.find('td') #긁기

    detail_text = detail.text #텍스트만
    
    f = open('C:/Users/user/raw/korean_literature/현대소설/'+str(text)+'.txt', 'w', encoding='utf-8-sig') #메모장 열기
    
    detail_text = detail_text.replace("\t", "") #텍스트 필터링
    detail_text = detail_text.replace("\n\n", "") #텍스트 필터링
    detail_text = detail_text.replace("  ", "") #텍스트 필터링
    
    #print(detail_text) #디테일
    f.write(str(detail_text) + '\n' )
    
    f.close()
    
    time.sleep(1)

 

 

 

 

 

 

반응형

댓글