안녕하세요~
매일매일 딥러닝 으니입니다!
오늘은 Python 첫번째 편!
BeutifulSoup, scrapy, urllib 등을 이용한 다양한 웹 크롤링 방법 중 BeautifulSoup을 이용하여 웹 크롤러를 만들어 보겠습니다!
크롤러란?
크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위이다. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부른다. 출처: 나무위키
1. NaverAPI를 이용한 웹 크롤
NaverDeveloper: https://developers.naver.com
[ step1. 어플리케이션 등록하기! ]
※ naver id로 등록하실 수 있습니다.
[ step2. id & key 확인하기 ]
※ 위에서 생성한 내 어플리케이션에서 확인하실 수 있습니다.
[ step3. 웹 크롤러 만들기 ]
# naver_search_api import os import sys import urllib.request import json client_id = "YOUR_CLIENT_ID" client_secret = "YOUR_CLIENT_SECRET" encText = urllib.parse.quote(input('검색할 단어 : ')) start = "&start=" + input('검색 시작 위치 : ') display = "&display=" + input('출력건수 : ') category = input('news or cafearticle : ')
# xml 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText
# json 결과
# url = "https://openapi.naver.com/v1/search/" + category + "?query=" + encText
# option 추가 가능
url = "https://openapi.naver.com/v1/search/"+category+"?query="+encText+start+display request = urllib.request.Request(url) request.add_header("X-Naver-Client-Id",client_id) request.add_header("X-Naver-Client-Secret",client_secret) response = urllib.request.urlopen(request) rescode = response.getcode() response_body = response.read().decode('utf-8') json_data = json.loads(response_body) items = json_data["items"]
# rescode 200은 상태를 정상을 의미한다. if(rescode==200):
# 결과 파일로 저장하기 file = open("naver_"+category+".txt","w",encoding='utf-8') for item in items: file.write('제목: ' + item["title"] + '\n') file.write('요약내용 : ' + item["description"] + '\n') file.write('\n') file.close() else: print("Error Code:" + rescode)
2. 웹 크롤 중 발생하는 한글 인코딩 문제 해결하기
import requests from bs4 import BeautifulSoup
page = requests.get(url) # print(page.encoding)
# page.encoding = 'utf-8'
if(page.status_code==200):
soup_sub = BeautifulSoup(page_sub.content, 'html.parser',from_encoding='ANSI')
처음 인코딩 에러가 났을 때 utf-8 로 인코딩을 다시해봤지만 문제가 해결되지 않았습니다.
그때 이 문제를 해결하는 방법은 ANSI 로 인코딩하는 것입니다.
여기서 잠깐!
[ utf-8과 ANSI 인코딩의 차이? ]
ANSI와 UTF-8은 널리 사용되는 두 개의 문자 인코딩 방식압나다.
ANSI
ANSI 표준에서 모두는 128문자 이하로 했습니다.
128문자 이하는 ASCII와 거의 같았지만, 지역에 따라 128 자 이상에서 문자를 처리 할 수있는 여러 가지 방법이있습니다.
이러한 서로 다른 시스템을 코드페이지라고 하며 한국의 경우 CP949 입니다.
(참고: 리눅스에서는 cp949로 해야 인코딩이 되었습니다.)
출처:
UTF-8
UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용합니다.
7비트 ASCII 문자와 혼동되지 않게 하기 위하여 모든 바이트들의 최상위 비트는 1입니다.
따라서 첫 128 문자는 1바이트로 표시되고, 그 다음 1920 문자는 2바이트로 표시되며, 나머지 문자들 중 BMP 안에 들어 있는 것은 3바이트, 아닌 것은 4바이트로 표시됩니다.
오늘은 여기까지!!
'PYTHON으로 딥러닝하기' 카테고리의 다른 글
Python으로 딥러닝하기 | 퍼셉트론 vs 신경망? & 출력함수(항등함수, Softmax 함수) (0) | 2018.08.21 |
---|---|
파이썬으로 딥러닝하기 | XOR & 신경망 활성화 함수(계단, 시그모이드, ReLU 함수) (0) | 2018.08.17 |
파이썬으로 딥러닝하기 | 퍼셉트론(Perceptron)이란? (2) | 2018.08.16 |
딥러닝에 필요한 파이썬 기본 문법 | numpy & matplotlib (0) | 2018.08.16 |
Gradient Descent(경사하강법) 와 SGD( Stochastic Gradient Descent) 확률적 경사하강법 (0) | 2018.08.01 |