BeautifulSoup로 웹 크롤링 하기
안녕하세요!! 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 읽어오기
1 2 3 | # -*- coding:UTF-8 -*- from bs4 import BeautifulSoup import urllib.request |
get_text라는 함수를 만들어 네이버 기사의 내용을 가져와 보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | URL = '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 |
urllib.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에도 저장하도록 하였습니다.
전체코드
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 32 | # -*- coding:UTF-8 -*- from bs4 import BeautifulSoup import urllib.request # 출력 파일 명 OUTPUT_FILE_NAME = 'output.txt' # 긁어올 URL URL = '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