-
BeautifulSoup로 웹 크롤링 하기💻 프로그래밍/Python 2017. 10. 29. 22:08
안녕하세요!! JAY입니다. 오늘은 파이썬으로 웹 크롤링을 해보도록 하겠습니다.
오늘 웹 크롤링을 하기 위해 BeautifulSoup 라는 API를 사용할 것 입니다.
BeautifulSoup는 HTML과 XML 파일로부터 데이터를 뽑아내기 위한 파이썬 라이브러리입니다.
BeautifulSoup 문서 : https://www.crummy.com/software/BeautifulSoup/bs4/doc/
1. BeutifulSoup 설치
먼저 pip install beautifulsoup4 명령어로 BeautifulSoup를 설치해 줍니다.
추가로 우리는 URL을 가지고 크롤링을 해야하기 때문에 urlib패키지의 request모듈을 사용하겠습니다.
2. URL 읽어오기
123# -*- coding:UTF-8 -*-from bs4 import BeautifulSoupimport urllib.requestget_text라는 함수를 만들어 네이버 기사의 내용을 가져와 보도록 하겠습니다.
123456789101112URL = 'http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=031&aid=0000428125'# 크롤링 함수def get_text(URL) :source_code_from_URL = urllib.request.urlopen(URL)soup = BeautifulSoup(source_code_from_URL, 'html.parser')text = ''for item in soup.find_all('div', id = 'articleBodyContents') :text = text + str(item.find_all(text = True))return texturllib.request.urlopen은 URL을 여는 함수입니다. URL 열기에 성공하면 response.status의 값이 200이 나옵니다
(200은 HTTP 상태 코드이며 서버가 요청을 제대로 처리했다는 뜻입니다).
print(source_code_from_URL.headers)
print(source_code_from_URL.code)
print(source_code_from_URL.read())
위 코드를 보시면 읽어온 URL의 헤더와, 상태코드, 읽은 값을 출력하여 아래사진처럼 보여줄 수 있습니다.
다음은 BeautifulSoup를 사용해 데이터를 파싱하는 것입니다.
BeautifulSoup는 파이썬 표준 라이브러리에 포함된 HTML 파서를 합니다. 그외에 다른 여러 HTML 파서들 또한 지원합니다.
BeautifulSoup(source_code_from_URL, 'html.parser') 는 html paraer로 파싱을 하겠다는 말입니다.
filnd_all함수로 특정 태그와 iD를 읽어옵니다. 크롤링할 웹페이지에서 페이지소스 보기를 하시면
div 태그에 id가 articleBodyContents가 있는데, 바로 본문 내용입니다. 저희는 이 본문 내용만 크롤링 하겠습니다.
3. 크롤링 결과 출력
마지막으로 크롤링 결과를 확인하기 위해 출력을 해보도록 하겠습니다. 저는 추가로 text에도 저장하도록 하였습니다.
전체코드
1234567891011121314151617181920212223242526272829303132# -*- coding:UTF-8 -*-from bs4 import BeautifulSoupimport urllib.request# 출력 파일 명OUTPUT_FILE_NAME = 'output.txt'# 긁어올 URLURL = 'http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=031&aid=0000428125'# 크롤링 함수def get_text(URL) :source_code_from_URL = urllib.request.urlopen(URL)soup = BeautifulSoup(source_code_from_URL, 'html.parser')text = ''for item in soup.find_all('div', id = 'articleBodyContents') :text = text + str(item.find_all(text = True))return text# 메인 함수def main() :open_output_file = open('output.txt', 'w')result_text = get_text(URL)open_output_file.write(result_text)open_output_file.close()print(result_text)if __name__ == '__main__':main()결과
자 제대로 기사의 본문 내용을 크롤링 한걸 볼 수 있습니다.
지금까지 기본적인 BeautifulSoup 사용과 웹 크롤링에 대해서 알아봤습니다.
공식문서에 보면 설명이 잘 되어있어 사용에 크게 어려움은 없었습니다.
이상으로 오늘의 포스팅을 마치겠습니다!! 여러분 재밌는 코드 생산하시고 좋은하루 되세요:D
'💻 프로그래밍 > Python' 카테고리의 다른 글
[BitBar] 오픈소스 플러그인 내맘대로 만들어보기 (Mac OS 메뉴바 플러그인) (0) 2020.06.14 [Python]메타클래스 & 인스턴스, 클래스, 스태틱 메소드 개념 정리 (2) 2018.04.30 우분투에서 python 가상환경(venv) 설치 안될 경우 (2) 2018.01.09 Python과 SQLite3를 사용해 DB만들기 (0) 2017.10.25 [Python]웹환경에서의 글로벌 변수(global value) 사용 (1) 2017.09.17