Linux, ML/DL, DevOps, 클라우드

[CODELION 강의] [심화] 같이 푸는 PYTHON - 크롤링 본문

Programming Language/Python

[CODELION 강의] [심화] 같이 푸는 PYTHON - 크롤링

draidev 2022. 3. 17. 23:35

[심화] 같이 푸는 PYTHON 강의를 마지막으로 실시간 강의를 시작하기전에 듣는 CODELION강의를 다 들었습니다.

이번 강의에서는 다음과 같은 것들을 진행했습니다!!

  1. BeautifulSoup를 이용한 Crawling
  2. API로 날씨 정보를 가져와서 오늘의 날씨 프로그램
  3. googletrans라이브러리를 활용한 번역기 프로그램
  4. SMTP를 활용한 메일 보내기 프로그램

우선 크롤링 프로그래밍에 대해 정리해 보겠습니다.

목차>

더보기

목차

     

    01_01. Crawler, Crawling

    Web Crawler : 웹 페이지의 데이터를 모아주는 소프트웨어
    Web Crawling : 크롤러를 사용해 웹 페이지의 데이터를 추출해 내는 행위

    01_02 requests

    requests모듈은 웹사이트에 HTTP요청을 보내고 그에 대한 응답값을 받기 위해 사용합니다.
    즉 서버와 통신하기 위한 Python의 모듈입니다.

    requests모듈을 import 해줍니다.
    다음과 같이 get()함수에 요청을 보내기 위한 사이트의 주소를 매개변수로 전달 하면 그에 대한 응답을 변수response에 저장하겠습니다.

    import requests
    
    url = "http://www.naver.com"
    response = requests.get(url)
    
    print(response)

    출력해보면 다음과 같이 뜨고, 연결이 잘 되었다는 의미입니다.

    requests.get() 정상 출력

    print(response.text)를 따로 해보시면 요청한 사이트의 전체 html코드를 문자열 자료형으로 가져오게 됩니다.

    01_03 BeautifulSoup

    BeautifulSoup는 requests를 통해 얻어온 html데이터를 스프객체로 변환하여 원하는 데이터를 손쉽게 추출할 수 있도록 도와주는 파이썬 라이브러리입니다.

    import requests
    from bs4 import BeautifulSoup
    
    url = "http://www.naver.com"
    response = requests.get(url)
    
    print(type(response.text))
    print(type(BeautifulSoup(response.text, 'html.parser')))

    BeautifulSoup(response.text, 'html.parser')의 타입을 보면 str이 아닌 스프객체로 변환된걸 볼 수 있습니다.

    타입 비교 출력

    'html.parser'매겨변수를 좀 더 살펴보면 다음과 같습니다.

    • Parsing : 문서,데이터를 의미있게 변경하는 작업. 문자열을 의미있는 값으로 분해하고 이런것들로 이루어진 데이터로 변경하는것.
    • Parser : 파싱을 도와주는 프로그램
    • html.parser : HTML 데이터를 받아서 시작 태그, 종료 태그, 텍스트, 주석 및 기타 마크업 요소를 만날 때마다 처리기 메서드를 호출합니다.

    다음으로 soup라는 변수에 스프객체를 담아서 원하는 데이터를 출력 해보겠습니다.

    import requests
    from bs4 import BeautifulSoup
    
    url = "http://www.naver.com"
    response = requests.get(url)
    
    soup = BeautifulSoup(response.text, 'html.parser')
    
    print(soup.title)  # soup의 title태그만 가져온다
    print(soup.title.string)  # title태그안의 문자를 가저온다
    print(soup.span)  # 가장 앞에있는 span태그만 가져온다
    print(soup.findAll('span'))  # 모든 span태그를 가져온다

    원하는 html 데이터 출력

    01_04 파일 만들기

    위에서 데이터를 얻어왔다면 이제 데이터를 파일을 만들어서 저장하는 법에 대해 알아보겠습니다.
    open(파일이름, 파일모드)함수를 통해서 파일을 생성하고 모드에 따라 읽기,쓰기,추가가 가능합니다.

    file = open("naver.html","w")  # 쓰기모드로 파일을 엽니다.
    file.write(response.text)  # write() : 파일에 매개변수의 내용을 씁니다.
    file.close()  # 파일을 다 사용했다면 반드시 닫아줘야 합니다.

    파일열기모드 설명

    • r 읽기모드 - 파일을 읽기만 할 때 사용
    • w 쓰기모드 - 파일에 내용을 쓸 때 사용
    • a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

    01_05 datetime

    from datetime import datetime를 추가합니다.
    저는 네이버의 미세먼지에 대한 정보를 간단하게 가져와서 표시해봤습니다.

    import requests
    from bs4 import BeautifulSoup
    from datetime import datetime
    
    url = "http://www.naver.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    results = soup.findAll('li','air_item')
    
    print(datetime.today().strftime("%Y년 %m월 %d일의 미세먼지"))  # 날짜 출력
    
    for result in results:
        search_dust_file.write(result.get_text()+"\n")  # 파일로 출력
        print(result.get_text(),"\n")

    미세먼지 출력

    Comments