/ LECTURE

Python - Scraping_basic

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

78일차 수업

데이터

정량적 데이터 : 수치로 명확하게 표현, 도형, 기호 등

정성적 데이터 : 비정형 데이터, 언어, 문자 등

  1. data : 데이터, 객관적인 사실 ->

  2. information : 정보, 데이터 간 연관 관계 속에서 도출된 의미 ->

  3. knowledge : 지식, 정보를 구조화하여 유의미한 정보로 분류 ->

  4. 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')