본문 바로가기

데이터분석 및 프로젝트

기사를 크롤링하여 mysql에 넣어보자 :)

 

 

 

 

 

 

 

 

 

 

 

기사를 크롤링하여 mysql에 넣어보자 :)

 

아래 글중에 조선일보 기사를 크롤링하여 워드 클라우드를 했던 글이 있습니다. 해당글의 크롤링 코드들을 이용하여 크롤링한 기사들을 제목과 내용으로 구분지어 바로 mysql로 넣어보겠습니다.

In [1]:
from urllib.request import urlopen
from bs4 import BeautifulSoup
In [2]:
import nltk
import re
In [62]:
url_base="http://news.chosun.com/site/data/html_dir/2019/12/02/20191202"
last='.html'

title=[]
news_list=[]
for i in range(3000):
    
    index=str(i)
    if len(index)==1:
        index='0000'+index
    elif len(index)==2:
        index='000'+index
    elif len(index)==3:
        index='00'+index
    else: 
        insex='0'+index
    try:
        page=urlopen(url_base+index+last)
        soup = BeautifulSoup(page, 'html.parser') 
        title.append(soup.find('h1').get_text())
        news_list.append(soup.find_all(id="news_body_id",itemprop="articleBody")[0].get_text())
    except:
        pass
In [64]:
title[100]
Out[64]:
"'아빠본색' 전광렬, 쉐어하우스 머물며 미슐랭 막내도전..뉴욕서 아들과 조우[어저께TV]"
In [63]:
news_list[100]
Out[63]:
'\n입력 2019.12.02 06:50\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [OSEN=전은혜 기자]\'아빠본색\' 전광렬이 오랜 꿈이었던 요리에 도전, 아들의 아르바이트 생활을 이해하며 공감대를 형성했다.\xa01일 오후 방송된 \xa0채널A \'아빠본색\'에는 전광렬이 오랜 연예 생활에 첫 예능에 도전, 미슐랭 레스토랑의 군대 서열에 막내역을 맡게 됐다.\xa0전광렬은 "자신이 뉴욕에서 40분 까까이 걸어다니면서 헤멨는데 지금 1분으로 나왔다 제작진에 무언가 음모가 있는 거 같다"고 하자 스튜디오에서는 "그 화면이 재미없었던 거 아니겠냐"는 추측이 이어졌고, 구라가 "다 그럴 만한 이유가 있겠죠"라는 말로 이를 단정 짓자 광렬이 "이사람 나쁜 사람이네"라고 섭섭함을 비춰 웃음을 짓게 했다.\xa0광렬은 라면집을 발견하고는 반가움을 감추지 못했다. 이어 매인 셰프가 등장해서 "궁극적으로 하려는 게 뭐냐"고 물었다. "음식을 통해서 교류하고 소통하고 싶은 장을 만들고 싶다"는 광렬의 말에 "그런 말을 해도 포기하는 사람이 많아서 짧은 시간안에 얼마나 소화 할 수 있는지 제가 몰라서 테스트를 봐야 할 거 같은데, 저희가 마음에 안든다고 하시면 어떻게 하실거예요?"라고 냉담하게 반응했다. 이어 테스트의 기회를 준 이유를 물어보자 "얼마나 진짜로 하고 싶어 하는건지 방송용으로 촬영을 하기 위해서 온건지 확인 하고 싶었다"라고 했다.\xa0그는 세척기에서 나온 라멘 그릇을 닦다가 뜨거움을 이기지 못하고 그릇을 깨트렸다. 이에 제인은 비닐 봉투를 내밀며 그에게 수습할 것을 권했고, 더글라스 셰프는 "빨리빨리 해달라"고 하며 그를 재촉하는 가운데, "비질 안해보셨어요? 손 베이실 까봐 그러시는 거예요? 그럼 칼은 어떻게 드시려고"라는 말로 그를 압박 했지만 이어 물을 손수 따라서 건네는 등의 자상함도 보였다.\xa0이어지는 미션은 화장실 청소였다. 더글라스는 "설거지 하시는 것 보다는 낫네요"라는 말로 첫 칭찬을 받았다. 이어지는 광렬의 짠한 모습에 김구라는 "오해하실 수도 있겠지만, 이건 100% 전광렬씨가 하겠다고 해서 시작한 미션이다"라고 했다.\xa0다음으로 칼을 이용한 파 썰기가 시작됐다. 광렬은 "셰프님 앞이라서 긴장이 되서 손이 떨린다"라고 했다. 이에 더글라스는 "긴장은 주방에서 절대 풀리면 안된다라고 하며 마지막으로 다시 한번 여쭤보는데, 진짜 하실 수 있겠어요?"라고 했다. "어느정도 견딜 수 있는지가 중요한데 오늘 하시는 걸 보니까 한번 기회를 줘보자는 생각이 들었다" 라고 했다.\xa0광렬은 식당 밖으로 나오자마자 한국인 팬들의 환영을 받았다. "식당 안과 밖의 온도가 너무 다르다"는 심진화의 말에 스튜디오는 웃음 바다가 됐다. 이어 광렬은 숙소로 입성해 짐을 풀 수 있게 됐다. 광렬은 숙소를 떠올리며, "쉐어 하우스인데 제가 진짜로 촬영 내내 저기에서 묵었다"고 끔찍한 표정을 지었다.홀로 누워있는 그를 아들이 찾았다. 친구같은 아들이 들어와서 그를 반겼다. 아들 전동혁은 "잘있었습니다 아버지"라고 하면서 방송 프로덕션에 근무 하면서 다큐를 만들고 있다고 자신을 소개 했다. "아버지가 요리를 꿈꿔왔다는 건 오래전부터 들어왔는데 이번에 시작하신다는 말을 듣고 아직도 야망이 남아 계시다는 걸 듣고 정말 놀랐다"고 했다. 광렬은 "뉴욕에서 제일 힘든 게 뭐냐"는 물음에 동혁은 "머니, 아버지가 다 끊었잖아요."라고 했다. 광렬은 "졸업을 하자마자 모든 지원을 끊었다"고 하면서 "그게 당연한거"라고 했다. 동혁은 "그럼 당연한거지. 근데 힘들었어요. 그래서 아버지를 이해할 수 있게 됐고. 고마워요" 라고 했다.\xa0동혁은 "저는 사회 생활을 잘한다"고 하면서 "말을 잘한다"고 했다. "일이 어떻게 되어 가냐"고 광렬이 물어보자, "제인구달 다큐를 만들어 가고 있다"고 했다. "침팬치 영상을 너무 많이 봐서 침팬치 언어도 가능하다"고 하면서 침팬치 언어를 구사했고 광렬은 뉴욕에 와서 처음으로 크게 웃어 보였다.\xa0동혁과 광렬은 레스토랑에서 함께 저녁을 했다. 그동안 어떻게 지냈는지 물어보는 광렬에게 동혁은 "아르바이트를 힘든 것도 많이 했다"고 하면서 "설거지랑 화장실 청소를 모두 했다"라고 했다. 이에 광렬은 "나도 오늘 그걸 종일 했다"라고 하면서 아들이 겪었던 고통을 진심으로 공감 했다. 광렬은 "그동안 힘들었을 텐데 몰라줘서 미안하다"면서 손을 내밀었다./anndana@osen.co.kr[사진]채널A \'아빠본색 방송화면 캡처 \n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n \n\n\n좋아요 0\n\n\nCopyrights ⓒ 스포츠 엔터테인먼트 전문 미디어 OSEN. 무단전재 및 재배포 금지\n\n\n\n'
In [51]:
for i in range(len(news_list)):
    
    news_list[i] = re.sub('입력\s[0-9,\W]*\n','',news_list[i])  #'입력'으로 시작~new line까지의 문자열 삭제
    news_list[i] = re.sub('좋아요[\W,\w]*','',news_list[i])   # 좋아요 뒤로 모두 삭제
    news_list[i] = re.sub('[○|\n]','',news_list[i])    # 동그라미, <사진>, new line 삭제
    news_list[i] = re.sub('<사진>','',news_list[i])
    news_list[i] = re.sub('\s\W*=기자\s[\w,\W]*[.]com','',news_list[i]) 
    news_list[i] = re.sub('\W*=기자\s[\w,\W]*[.]com','',news_list[i]) 
    news_list[i] = re.sub('[\w,\W]*\s기자]','',news_list[i])   #~~~기자] 로 된 문자열 삭제
    news_list[i] = re.sub('/\s[\W,\w]*co.kr','',news_list[i]) # ~로 시작~co.kr 끝나는 문자 삭제
    news_list[i] = re.sub('/[\W,\w]*co.kr','',news_list[i])  # /로 시작~co.kr 끝나는 문자 삭제
    news_list[i] = re.sub('▲\s[\W,\w]*','',news_list[i]) #세모뒤로 다 삭제
    news_list[i] = re.sub("\\xa0",'',news_list[i]) #\xa0뒤로 모두 삭제
    news_list[i] = re.sub('/\W*@[\W,\w]*','',news_list[i]) #이메일 주소 뒤의 문자열 모두 삭제
    news_list[i] = re.sub(r'\[사진\]\s[\w,\W,\s]*','',news_list[i]) #[] 뒤로 문자 없애줌
    news_list[i] = re.sub('수정\s[0-9,\W]*\r','',news_list[i])    #'수정'으로 시작~\r까지의 문자열 삭제
    news_list[i] = re.sub('\s\w*=\w*\s기자\s[\w,\W]*','',news_list[i]) 
    news_list[i] = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》“”’]','',news_list[i])
    news_list[i] = re.sub("'구해줘홈즈' 의뢰인, 최종매물 외 '복팀' 테라스 원룸 선택→'",'',news_list[i])
    title[i] = re.sub('입력\s[0-9,\W]*\n','',title[i])
    title[i] = re.sub('\s\W*=기자\s[\w,\W]*[.]com','',title[i])
    title[i] = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》“”’]','',title[i])
In [54]:
news_list[100]
Out[54]:
'아빠본색 전광렬이 오랜 꿈이었던 요리에 도전 아들의 아르바이트 생활을 이해하며 공감대를 형성했다1일 오후 방송된 채널A 아빠본색에는 전광렬이 오랜 연예 생활에 첫 예능에 도전 미슐랭 레스토랑의 군대 서열에 막내역을 맡게 됐다전광렬은 자신이 뉴욕에서 40분 까까이 걸어다니면서 헤멨는데 지금 1분으로 나왔다 제작진에 무언가 음모가 있는 거 같다고 하자 스튜디오에서는 그 화면이 재미없었던 거 아니겠냐는 추측이 이어졌고 구라가 다 그럴 만한 이유가 있겠죠라는 말로 이를 단정 짓자 광렬이 이사람 나쁜 사람이네라고 섭섭함을 비춰 웃음을 짓게 했다광렬은 라면집을 발견하고는 반가움을 감추지 못했다 이어 매인 셰프가 등장해서 궁극적으로 하려는 게 뭐냐고 물었다 음식을 통해서 교류하고 소통하고 싶은 장을 만들고 싶다는 광렬의 말에 그런 말을 해도 포기하는 사람이 많아서 짧은 시간안에 얼마나 소화 할 수 있는지 제가 몰라서 테스트를 봐야 할 거 같은데 저희가 마음에 안든다고 하시면 어떻게 하실거예요라고 냉담하게 반응했다 이어 테스트의 기회를 준 이유를 물어보자 얼마나 진짜로 하고 싶어 하는건지 방송용으로 촬영을 하기 위해서 온건지 확인 하고 싶었다라고 했다그는 세척기에서 나온 라멘 그릇을 닦다가 뜨거움을 이기지 못하고 그릇을 깨트렸다 이에 제인은 비닐 봉투를 내밀며 그에게 수습할 것을 권했고 더글라스 셰프는 빨리빨리 해달라고 하며 그를 재촉하는 가운데 비질 안해보셨어요 손 베이실 까봐 그러시는 거예요 그럼 칼은 어떻게 드시려고라는 말로 그를 압박 했지만 이어 물을 손수 따라서 건네는 등의 자상함도 보였다이어지는 미션은 화장실 청소였다 더글라스는 설거지 하시는 것 보다는 낫네요라는 말로 첫 칭찬을 받았다 이어지는 광렬의 짠한 모습에 김구라는 오해하실 수도 있겠지만 이건 100 전광렬씨가 하겠다고 해서 시작한 미션이다라고 했다다음으로 칼을 이용한 파 썰기가 시작됐다 광렬은 셰프님 앞이라서 긴장이 되서 손이 떨린다라고 했다 이에 더글라스는 긴장은 주방에서 절대 풀리면 안된다라고 하며 마지막으로 다시 한번 여쭤보는데 진짜 하실 수 있겠어요라고 했다 어느정도 견딜 수 있는지가 중요한데 오늘 하시는 걸 보니까 한번 기회를 줘보자는 생각이 들었다 라고 했다광렬은 식당 밖으로 나오자마자 한국인 팬들의 환영을 받았다 식당 안과 밖의 온도가 너무 다르다는 심진화의 말에 스튜디오는 웃음 바다가 됐다 이어 광렬은 숙소로 입성해 짐을 풀 수 있게 됐다 광렬은 숙소를 떠올리며 쉐어 하우스인데 제가 진짜로 촬영 내내 저기에서 묵었다고 끔찍한 표정을 지었다홀로 누워있는 그를 아들이 찾았다 친구같은 아들이 들어와서 그를 반겼다 아들 전동혁은 잘있었습니다 아버지라고 하면서 방송 프로덕션에 근무 하면서 다큐를 만들고 있다고 자신을 소개 했다 아버지가 요리를 꿈꿔왔다는 건 오래전부터 들어왔는데 이번에 시작하신다는 말을 듣고 아직도 야망이 남아 계시다는 걸 듣고 정말 놀랐다고 했다 광렬은 뉴욕에서 제일 힘든 게 뭐냐는 물음에 동혁은 머니 아버지가 다 끊었잖아요라고 했다 광렬은 졸업을 하자마자 모든 지원을 끊었다고 하면서 그게 당연한거라고 했다 동혁은 그럼 당연한거지 근데 힘들었어요 그래서 아버지를 이해할 수 있게 됐고 고마워요 라고 했다동혁은 저는 사회 생활을 잘한다고 하면서 말을 잘한다고 했다 일이 어떻게 되어 가냐고 광렬이 물어보자 제인구달 다큐를 만들어 가고 있다고 했다 침팬치 영상을 너무 많이 봐서 침팬치 언어도 가능하다고 하면서 침팬치 언어를 구사했고 광렬은 뉴욕에 와서 처음으로 크게 웃어 보였다동혁과 광렬은 레스토랑에서 함께 저녁을 했다 그동안 어떻게 지냈는지 물어보는 광렬에게 동혁은 아르바이트를 힘든 것도 많이 했다고 하면서 설거지랑 화장실 청소를 모두 했다라고 했다 이에 광렬은 나도 오늘 그걸 종일 했다라고 하면서 아들이 겪었던 고통을 진심으로 공감 했다 광렬은 그동안 힘들었을 텐데 몰라줘서 미안하다면서 손을 내밀었다사진채널A 아빠본색 방송화면 캡처   '
In [56]:
import pymysql
from openpyxl import Workbook
from openpyxl import load_workbook
In [57]:
conn = pymysql.connect(host='localhost', user='root', password='dnjstlr1', db='study_db', charset='utf8')
In [58]:
sql = '''
            CREATE TABLE josun1202 (
                   title mediumtext,
                   news_list LONGTEXT
            )
'''
In [59]:
cursor=conn.cursor()
In [60]:
cursor.execute(sql)
Out[60]:
0

 

In [61]:
i=0
for i in range(len(news_list)):
    sql = """INSERT INTO josun1202 (title,news_list) VALUES('"""+title[i]+"""','"""+news_list[i]+"""')"""
    cursor.execute(sql)
    conn.commit()
 

이렇게 하면 아래처럼 기사의 제목과 내용이 정리되어 mysql에 들어가는 것을 확인 할 수 있습니다. :)