블로그 이미지
잡다한 취미 생활 및 일상에 대한 소소한 이야기를 적어나가는 블로그입니다.
붉은kkk

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

안녕하세요. 

 

지난 포스팅 이후로 한참을 쉬었던것 같네요.

 

오늘은 작성된 프로그램을 소개하는 형태로 포스팅을 마칠 예정입니다.

조금씩 프로그래밍 공부를 하다 보니, 나중에 제가 학습한 내용을 바탕으로 강의를 해보는 것도 괜찮을 것 같다라는 생각이 들고 있습니다. 

그때를 위해 조금은 아껴두어야겠죠? 제가 만든 프로그램의 모든 소스가 들통(?) 나면... 부끄럽지만... 부끄럽겠죠 ㅋㅋ

 

오늘은 간단히 뭘 만들었는지만 소개할게요.

 

 

1. 프로그램 용도 : 네이버 영어사전 (단순)

2. 제작 사유 : 회사일을 할 때 영어 검색을 많이 해야되는데, 브라우저에서 검색하기가 불편해서... (단순 제 편의를 위함)

3. 기능 : 

   1) 영어 단어 검색 기능

   2) TTS 기능

   3) 검색한 단어 텍스트 파일에 자동 저장 기능

 

*단어를 검색하면, 한글로 설명된 내용이 정제되어 상기와 같이 출력됩니다.

 

 

다음엔 보다 흥미로운 주제로 찾아뵙겠습니다. 


네이버 실시간 검색어 웹크롤링도 배웠으니 계속 응용을 해봐야겠죠?


이번엔 네이버 영화 리뷰를 크롤링 해 보겠습니다.


시작전 주의 사항 먼저~


주의 : 허락되지 않은 사이트의 크롤링은 법적으로 문제가 될 수 있습니다. 

제 블로그는 파이썬으로 어떻게 크롤링을 할 수 있는지에 대해서만 알려주고 있으며, 

크롤링으로 인해 법적 문제 발생시 법적 책임은 지지 않음을 알려 드립니다.



1. 크롤링할 페이지 HTML 구조 분석

     -  https://movie.naver.com/movie/running/current.nhn 

        현재 상영작 중 하나를 골라서 분석을 해 보겠습니다.

        웹페이지에 접근 후 F12를 눌러서 Data 구조를 분석 해 봅니다.

[현재 상영작 페이지]


[아쿠아맨 리뷰페이지]

- 분석을 했더니, 아래와 같은 구조를 찾았습니다.

  <ul class="rvw_list_area">

    <li> ... 

 


2. 크롤링 코드 작성

- 바로 코드를 보여드릴게요.

1: import urllib.request

2: from bs4 import BeautifulSoup

3: print("영화 리뷰를 가져올 페이지를 입력하세요.")
4: MovieName = input()

5: MoviePage = int(input('리뷰 페이지수를 입력하세요:'))

6: MoviePage = MoviePage + 1      

7: # ??? 리뷰 페이지수를 입력하면 1페이지 적게 출력되서 추가된 코드, 왜 그런지 모르겠네요.

8: print("리뷰내용은 MovieReview.txt로 저장됩니다.")

9: 
10: fileOut = open('MovieReview.txt', 'w', encoding='utf-8')

11:
12: def main():
13:    for pageidx in range(1, MoviePage):
14:     url = "%s&page=%d" % (MovieName, pageidx)
15:     soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")

16:     ul = soup.find("ul",class_="rvw_list_area")
17:     for i in ul.find_all("li"):
18:         print(i.strong.get_text(), file=fileOut)
19:         

20: if __name__ == "__main__":    #프로그램의 시작점일 때만 아래 코드 실행
21:    main()

22:    
23: fileOut.close()


- 리뷰 페이지와 크롤링할 페이지 수를 입력하면, 그 뒤엔 파일로 만들어지는 구조에요. (제목만 가져옵니다)

  이 후의 응용은 추가적으로 해 보시면 될 것 같네요.


취미로 시작한 프로그래밍인데 점점 할 수 있는게 많아지고 하고 싶은 것도 많아지고 재밌어 지네요.

이론적인 부분의 공부도 필요한데, 이 부분은 시간을 들여서 천천히 하나하나 내공을 다져봐야겠어요.

(책에 나와있는 이론들은 사실 재미없습니다. 구글링으로 프로그래밍이 되니까요... 그래도 나중을 위해서 천천히...)


다음엔 더 신박한 주제로 포스팅 할게요. 다들 즐거운 프로그래밍 생활 되세요. 





오늘은 뉴스기사를 크롤링하는 웹크롤러를 만들어 보겠습니다.


^^ 뉴스기사를 모아서 보면, 많은 양의 정보를 한번에 간편하게 볼 수 있을거 같네요.



아래 Source는 RunningWater님 블로그를 통해 배운 내용입니다.

(제 편의에 의해 Source의 일부만 변형되었습니다.

Source에 대한 상세 내용은 아래 RunningWater님 블로그를 참조해주세요.) 

출처 : https://justmakeyourself.tistory.com/entry/newsscraping-by-python-2




[Source code]

1: import requests
2: from bs4 import BeautifulSoup

3: 

4:  # 기사의 링크들이 담기는 리스트입니다.
5: rsss = []

6: # 파일은 아래 폴더에 저장됩니다.

7: fileOut = open('RssfileOut.txt','w', encoding='utf-8')

8: # rss와 기사에서 특정 부분을 크롤링하는 함수입니다.

9: def crawler(url, parser, css_selector):
10:    r = requests.get(url)
11:    soup = BeautifulSoup(r.content, parser)
12:    datas = soup.select(css_selector)

13:    if parser == 'lxml':
14:        print(datas[0].text, file=fileOut)
15:    else:
16:        for data in datas:
17:            rsss.append(data.text)

18: # 실행코드
19: print("크롤링을 시작합니다.")

20: crawler('http://file.mk.co.kr/news/rss/rss_50300009.xml','xml','item link')

21: print("rss 추출이 완료되었습니다.")

22: for link in rsss:
23:    try:
24:        crawler(link, 'lxml', '#article_body')
25:        print("="*20)
26:    except Exception as e:
27:        print(e)
28:        print('진행중이에요...')
29:        continue

30: print("크롤링을 종료합니다.")
31: fileOut.close()
       
저는 RSS뉴스 중 매일경제 신문의 부동산 섹션을 가져오는 프로그램을 작성해 보았어요.

7번행에 있는 코드는 가져온 기사를 파일로 저장해주는 코드이고

20번행에 있는 코드의 URL을 변경하면 본인이 원하는 RSS뉴스를 가져올 수 있습니다.


→ 프로그램 실행모습이에요, 크롤링 될 때 "=*20개"가 출력되면서 하나하나 크롤링 되는 거랍니다. 

    종료되면 크롤링을 종료합니다라는 내용이 출력되고 완료되요.

    결과는 직접 확인해보세요^^ 



그리고 가장 중요한 뉴스 기사의 무단전재 및 재배포는 금지입니다.

꼭 명심하세요.



하나하나 생각하고 있는 것들은 구현하다 보니 점점 파이썬이 재밌어지네요. 

다음에도 더 재미난 주제로 찾아올게요. 




웹크롤러 만들기 2탄을 포스팅합니다.

오늘은 완전히 간단한 예제 먼저 연습하고 다음시간에 신문기사 크롤러를 만들어 볼 거에요. 

(신문기사 크롤러를 만들어놓긴 했지만, 제가 코드에 대한 이해가 아직 부족해서 조금 더 공부를 하고 

포스팅할 에정입니다.)


크롤링을 위한 준비물 (라이브러리)

1. BeautifulSoup

2. 크롤링할 사이트(URL)

   - 이번 시간엔 제가 미리 만들어놓은 사이트의 웹페이지 내용을 크롤링할 겁니다.

     https://dongchanhong.github.io/python-study/



[Source Code]

1: from urllib.request import urlopen
2: from bs4 import BeautifulSoup
3: html = urlopen("http://dongchanhong.github.io/python-study/")
4: bsBody = BeautifulSoup(html.read(), "html.parser")
5: print(bsBody)


아무런 정제 없이 전체 HTML 페이지를 긁어 왔습니다.


다음엔 텍스트를 정제하는 방법, 원하는 부분만 선택해서 가져오는 방법등을 정리해 보겠습니다.


이번엔 PDF파일에서 텍스트 내용을 발췌하는 방법에 대해서 연습을 해볼게요.


회사 업무를 하다 보면 종종 PDF로 되어 있는 문서에서 텍스트를 가져오고 싶은데, 

원활하게 복사가 되지 않았던 경험이 다들 한번 씩은 있을 거에요.


그 불편함을 해소하고자, 전체 텍스트 부분을 뽑아내서 텍스트 파일로 저장하는 프로그램을 만들어 볼 겁니다.

(PDF파일에서 내용을 보고 정리하는 작업이 많을 때는 유용할 거 같네요^^)



1. 준비물

   - JDK (JAVA Development Kit) 

    - Tika 

      : PDF에서 텍스트를 뽑아낼 수 있게 해주는 라이브러리 

        (자바로 작성된 거 같네요, 이 라이브러리를 사용하기 위해서 JDK가 필요하답니다.)

    - 텍스트 추출할 PDF파일 (sample.pdf)

   → JDK 설치 과정은 생략할게요. 



2. Tika 라이브러리 설치

   - pip install tika 

     : 이걸 먼저 해주시고... 이것만 하면 끝이날 것 같았는데, 피곤한 과정이 남아 있네요. 

      (제 PC에서만 그런걸 수 도 있는데, 우선은 다 알려드리겠습니다.)


    - Source code 작성

     

      #-*- encoding:utf-8

      from tika import parser

      print("텍스트 파일을 추출할 PDF파일명을 입력하세요.")

      PDFfileName = input()


      print("텍스트 파일은 다음 폴더에 저장됩니다.")
      print("D:\data")

      inputpath = PDFfileName


     parsed = parser.from_file(PDFfileName)
     print(parsed["content"])

     fileOut = open('fileOut.txt', 'w', encoding='utf-8')

     print(parsed['content'], file=fileOut)

     fileOut.close()

   

     Source code는 본인이 직접 타이핑 해보면서, 한줄 한줄 왜 이렇게 작성되어 있는지 

         고민해보시면 될 거  같습니다. 어렵지 않으니 따로 설명은 하지 않을게요.

         (보시면 필요없는 라인도 있고 하니까, 자기 입맛에 맞춰서 만들어 주시면되요, 

          중간 중간 보이는 인자들은 어떤건지 궁금하다면 그 해당 명령어 or 함수에 대한 내용을 검색하면

          친절한 설명을 찾아볼 수 있답니다.

          영어 검색을 추천드려요^^)

      

음... 문제가 있네요. 


에러내용

1) Retriving http://search....\tika-server-1.19.jar to ...\temp\tika-server.jar.md5

2) Retriving http://search....\tika-server-1.19.jar to ...\temp\tika-server.jar


3. 문제 해결

    - 2개의 에러가 발생했어요. 

       느낌적으로 tika-server-1.19.jar파일을 복사하려는거 같은데 뭔가 잘 되지 않은거 같네요.

       제가 해결한 방법은 직접 서버로 찾아가서 (http:// 주소를 입력) tika-server-1.19.jar 파일을 다운로드

       했습니다.

       그 후에 복사하려던 폴더에 복사를 하고 이름도 똑같이 바꿔줬어요.

       tika-server-1.19.jar → tika-server.jar

       (tika-server.jar.md5는 생략했습니다. jar파일만 복사시 작동이 되서 굳이 하지 않았어요)


4. 프로그램 수행

    - 이제 미리 준비해 둔 sample.pdf의 텍스트 내용을 추출해서 파일로 만들어 볼게요.

    - Sample.pdf의 내용은 아래와 같습니다.

 

[Sample.pdf 내용]

    


    - 프로그램 수행 결과 : 에러가 사라지고 동작이 잘 됩니다.


[프로그램 수행결과]


    - 추출한 내용이 쉘에서 보이지 않는 것 같았으나, 스크롤바를 내려보니 잘 추출된 걸 확인 할 수 있었습니다.

     (성공입니다^^)

    

 

    - 파일도 만들라고 프로그래밍을 했었으니까, 잘 만들어졌는지 확인 해 볼게요.


(폴더에 fileOut.txt가 생성되어 있네요, 이것도 성공^^)


파일내용도 문제가 없는 것을 확인했습니다.  성공적이네요^^


다음에 또 재미난 내용으로 찾아올게요.


지난 시간엔 크롤링이 가능한 사이트에 대한 정보를 찾느라 시간을 보냈습니다.

우선 크롤러를 만드는게 목적이기 때문에, 고민은 잠시 접어 두고 크롤링을 할 수 있는 사이트를 직접 만든 뒤 

크롤링을 해 보도록 하겠습니다.


1. 크롤러 연습용 사이트 만들기

필요한 사항

    - HTML 문서를 업로드 할 수 있는 웹사이트가 필요

    - 무료 웹사이트를 어디서 만들수 있는가?

       GitHub에서 무료 웹사이트 제작 가능



2. GitHub 가입 및 웹사이트 만들기

    - https://github.com

    - 가입과정은 생략.

     - 가입 이후 repository 생성하기


저는 Python-study라는 이름으로 만들었어요. 

자, 이제 지루한 과정도 거의 끝에 다다르고 있습니다.


제 사이트 주소가 생성되었습니다.

 https://github.com/dongchanhong/python-study



3. 웹사이트 Index.html 만들기

     - 사이트에 접속시 실행되는 페이지를 만들어 보겠습니다.


Index.html도 만들었으니, 이 파일을 업로드 하고 페이지가 제대로 나오는지만 확인하면 끝이에요.

(홈페이지는 Index.html을 시작 페이지로 인식합니다.)



4. GitHub에 Index.html 올리기

● GitHub를 사용하기 쉽게 Desktop 프로그램을 설치해 주세요.

    - set up in Desktop을 클릭해서 프로그램 다운로드 


... 설치가 완료되면 실행해서 ... 로그인 등등 설정을 해주시고 ... 저는 아래와 같이 완료 되었습니다.



로그인하고, 기존에 만들었던 저장소를 열어서 여기에 HTML 문서를 업로드 해보는 것으로 오늘은 끝을 낼게요.



길고 긴 과정이 지나 이제 다 됐습니다...


파일 업로드 된 걸 확인했고, 마지막으로 설정을 변경 해 줘야됩니다. 

(지금 상태에서는 사이트 접속시 404 Not Found가 나옵니다.)


※ Settings → source에서 master branch를 선택하고 Save를 해주셔야됩니다.

그러면 이렇게 사이트가 생성되었다고 나와요.


이제 진짜 끝이 났습니다.

위에 생성된 https://dongchanhong.github.io/python-study/로 접속을 하면

이렇게 나오네요. 


이제 다음 시간부터는 크롤링 연습을 하나 하나 진행 해 보도록 하겠습니다.

이제 웹 크롤러를 만들어 볼까 합니다.


크롤러란 웹페이지의 내용을 가져오게 해주는 프로그램을 의미하며, 웹페이지의 내용을 가져오는 것을 크롤링 또는 스크래핑이라고 합니다.


우선 크롤링을 하기 전에 주의해야될 사항이 있는데 허락된 사이트에서만 크롤링을 해야된다는 점입니다.


예를들어 Naver나 Daum의 경우 크롤링을 허용하지 않고 있습니다.


자칫 잘못하다간 불법적인 영역이 될 수 있기 때문에 조심! 조심! 합시다.



크롤링이 가능한 사이트인지 아닌지 판별하기 위해서는 robots.txt파일을 살펴 봐야되요.
이 robots.txt는 무분별한 크롤링을 막고 컨트롤하기 위해 만들어진 규약이라고 하네요. 


ex)

1. www.naver.com/robots.txt

- 느낌이 허용하지 않는 거 같습니다. (Disallow가 있네요)


2. www.daum.net/robots.txt

- 여기도 마찬가지


3. www.google.com/robots.txt


- 구글도 제한이 있는거 같네요.


4. www.tistory.com/robots.txt

- 티스토리는 허용되는 것으로 보이네요.


크롤러를 만들기 전 불법/합법의 영역에 대한 내용을 확실히 파악하고 시작을 해야될 것 같습니다.


오늘은 여기까지, 항상 저작권 조심하세요^^;

다음 시간 부터는 크롤링이 허용된 사이트에서 크롤링 하는 방법에 대한 연습을 시작해보겠습니다.

이전 1 다음