Python - Scraping_basic
JAVA(자바), Python(파이썬) 기반의
AI 활용 응용 소프트웨어 개발자 양성 과정
찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요
78일차 수업
데이터
정량적 데이터 : 수치로 명확하게 표현, 도형, 기호 등
정성적 데이터 : 비정형 데이터, 언어, 문자 등
-
data : 데이터, 객관적인 사실 ->
-
information : 정보, 데이터 간 연관 관계 속에서 도출된 의미 ->
-
knowledge : 지식, 정보를 구조화하여 유의미한 정보로 분류 ->
-
wisdom : 지혜, 지식의 축적, 아이디어
데이터 베이스
문자, 기호, 음성, 화상, 영상 등 상호 관련된 다수의 콘텐츠를 정보 처리 및 정보 통신 기기에 의하여 체계적으로 수집/ 축적 하여 다양한 용도와 방법으로 이용할 수 있도록 정리한 정보의 집합체
- 콘텐츠 : 데이터, 정보, 지식, 저작물 등의 인식 가능한 모든 자료
특징
-
Integrated data, 통합된 데이터
-
Stored data, 저장된 데이터
-
Shared data, 공용 데이터
-
변화되는 데이터
빅데이터
크기 관점 :일반적인 데이터 베이스 소프트웨어로 저장, 관리, 분석할 수 있는 범위를 초과하는 규모의 데이터
분석 관점 : 다양한 종류의 대규모 데이터로부터 저렴한 비용으로 가치를 추출하고, 데이터의 초고속 수집, 발굴, 분석을 지원하도록 고안된 차세대 기술 및 아키텍처
구성
-
Investment(투자비용 요소) : Volume(규모), Variety(유형), Velocity(속도)
-
Return(비즈니스 효과) : Value(비즈니스 가치)
데이터 사이언스
IT 영역 : 시스널 프로세싱, 프로그래밍, 데이터 엔지니어링, 데이터 웨어하우징, 고성능 컴퓨터
분석 영역 : 수학, 확률 모델, 머신러닝, 분석학, 패턴 인식과 학습
비즈니스 컨설팅 영역 : 커뮤니케이션, 프레젠테이션, 스토리텔링, 시각화 등
웹 크롤링
조직적, 자동화된 방법으로 탐색하는 컴퓨터 프로그램
여러 인터넷 사이트(html, jsp, 문서 등) 수집해서 분류
찾은 데이터를 저장하고 쉽게 찾을 수 있도록 인덱싱(정리)
웹 스크래핑
여러 인터넷 사이트 내용을 가져오고 원하는 형태로 가공하는 행위
웹사이트의 데이터를 수집하는 모든 작업
스크래핑 기술의 일부 중 크롤링이 존재
웹 파싱
페이지(문서, html 등) 원하는 데이터를 특정 패턴이나 순서로 추출하고 가공하는 행위
특정 문자열을 의미있는 토큰(Token)으로 분해
parse tree : xml파일이나 json 형태처럼 만들어줌
토큰을 통해서 받은 데이터를 내제된 자료 구조로 빌드하는 문법을 검사하는 역할
크롤링된 데이터를 우리가 보기 편하게 가공하는 것이 파싱
웹페이지에 요청을 할 수 있는 모듈(라이브러리)
-
urllib : 내장모듈, 보내는 데이터의 형태에 따라서 get, post 구분, 인코딩된 바이너리 형태 구성
-
requests : 외장 모듈, 요청 메소드를 구분지을 수 있음, 딕셔너리 형태 구성
구조
클라이언트의 요청과 서버의 응답으로 구성
요청
-
GET : 서버에게 정보를 가져오기 위해 요청
-
POST : 새로운 정보를 보내기 위해 요청
-
PUT : 수정할 정보를 보내기 위해 요청
-
DELETE : 정보를 제거하기 위해 요청
import requests
import re # 정규식
url = “https//search.naver.com/search.naver”
params = {“query”: “파이썬”}
res = requests.get(url,params=params)
print(res.status_code)
html_data = res.text # 응답페이지 코드 반환, str 타입
print(html_data)
firstWord = html_data.find(“연관 검색어”)
print(html_data[firstWord:firstWord+6]) # output 연관검색어
body = re.search(‘<h2>.*</h2>’,html_data)
print(body.group()) # output “<h2>파워링크</h2>”
from urllib import request
from urllib.error import URLError # 예외 활용 가능
# requests모듈도 requests.exceptions. 를 통해 에러 제어가능
# 웹문서 접근, 문서 객체
try:
site = request.urlopen(‘https://datalab.naver.com’)
except URLError as e:
print(‘잘못된 접근’, e)
else:
byte_data = site.read() # 문서객체 읽기, 주어진 인자만큼을 데이터로 읽음
text_data = byte_data.decode()
print(text_data)
# 이미지 저장하기-1
url = ‘이미지 경로’
imgName = ‘저장할 경로+이름’ # 미리 만들어져있어야함
urlretrieve(url,imgName)
# 이미지 저장하기-2
img = request.urlopen(url).read()
with open(‘이미지 경로+이름’, ‘wb’) as f:
f.write(img)
경로
from urllib.parse import *
baseURL = 'https://spongebob53.github.io/a/b'
# '/' 기준으로 경로를 수정해줌 : 상대경로와 절대경로
# 기준 경로에서 '/'로 끝나지 않고, 입력할 값도 '/'로 시작하지 않으면 서로 변경(b -> c)
print(urljoin(baseURL,'c')) # output https://spongebob53.github.io/a/c
# 기준 경로에서 '/'로 끝나지 않고, 입력할 값에 '/'로 시작한다면 경로 이후에 메인경로 '/c'로 변경
print(urljoin(baseURL,'/c')) # output https://spongebob53.github.io/c
baseURL = ‘https://spongebob53.github.io/a/b/’
# 기준 경로에서 '/'로 끝나고, 입력할 값도 '/'로 시작하지 않으면 이후 경로로 추가(b/c)
print(urljoin(baseURL,'c')) # output https://spongebob53.github.io/a/b/c
# 기준 경로에서 '/'로 끝나고, 입력할 값에 '/'로 시작한다면 경로 이후에 메인경로 '/c'로 변경
print(urljoin(baseURL,'/c')) # output https://spongebob53.github.io/c
# 예외케이스, 아예 주소를 입력했을 때
print(urljoin(baseURL, ‘https://spongebob53.github.io’))
# urllib.parse
# 파싱을 도와주는 모듈 : 주소들을 가지고 우리가 원하는 대로 조작할 수 있도록 도와주는 모듈
url = 'https://blog.naver.com/korea91;a=1?b=2#b'
parse = urlparse(url)
print(parse) # output ParseResult(scheme='https', netloc='blog.naver.com', path='/korea91', params='a=1', query='b=2', fragment='b')
parse = urlsplit(url)
print(parse) # output SplitResult(scheme='https', netloc='blog.naver.com', path='/korea91;a=1', query='b=2', fragment='b')