PP-Data Collection

장지백·2023년 12월 15일
0

prepreocessing(by python)

목록 보기
1/10

머릿말

  • 아래의 data collection을 시작으로 총 10개의 컨텐츠로 구성된 시리즈이다.

  • 데이터 전처리 과정에서의 사용할 수 있는 도구들을 "코드"중심으로 요약해놓은 "허브"라고 볼 수 있으며 코드설명을 위해 시리즈별 초반부, 약간의 개념설명을 해 놓았다.

  • 아래의 모든 데이터 전처리 코드는 python으로 구현했으며, 실제 데이터 전처리 시 필요한 코드만 실용적으로 정리해 놓았기때문에 기본적인 python문법과 pandas코드정도를 알고있어야 이해 가능 할 것이다.

  • 이제 아래의 "개요" 단계를 시작으로 이 시리즈를 진행하도록 하겠다

* 이 게시물은 Data Science 핵심정리를 참고하여 작성되었습니다.

개요

수집할 데이터의 유형은 크게 아래의 3가지로 나눌 수 있다.
정형데이터 / 반정형데이터 / 비정형데이터

각 데이터 형태 별 정의되어 있는 구조가 다르기에, 수집방식도 다르다.
내용은 아래 사진에 간략히 정리해 놓았다

데이터 형태 별 수집코드

0.사전에 필요한 라이브러리 및 패키지 설명

pip install beautifulsoup4 lxml requests

import requests 
import lxml.etree
from bs4 import BeautifulSoup
from selenium import webdriver

1) BeautifulSoup(라이브러리) : HTML, XML 문서 파싱 후 데이터 추출

2) Requests(라이브러리) : HTTP 요청을 간편하게 보냄(인간친화적)

3) lxml(라이브러리) : XML, HTML 문서를 파싱하고 처리(C언어로 구현)
- 특징 : 매우 빠르고, 강력한 성능이 장점

4) selenium(라이브러리) : 웹 브라우저를 자동으로 제어 가능하게 도움

1. 정형 데이터

정형 데이터를 수집하는데 있어 여러가지 코드가 존재하나, 그 중 대표적인 방법인 "웹 스크래이핑" 방식의 코드를 설명하겠다

  • 웹 스크래이핑이란, 말 그대로 웹 페이지를 그대로 가져와 파싱하여 데이터를 추출하는 기법을 말하며 BeautifulSoup과 Requests, lxml의 라이브러리를 사용한다.

1) 검색어 설정

search = "스크롤하고 싶은 단어" 
url = "스크롤링 할 url링크 " + search + "&start=1"

# ConnectionError방지
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4758.102"}
  • ConnectionError
    - 서버에 연결불가능한 에러
    - 요청시간 초라고 발생하는 에러(예외)
    - 너무 많은 요청으로 인한 에러

2) 웹 서버에 GET 요청 / 웹 서버가 응답한 내용을 변수 response에 할당

response = requests.get(url,headers=headers)

3) HTLM 파싱(뉴스 타이틀을 가져오는 예시)

soup = BeautifulSoup(response.text, "html.parser")

# 페이지에서 뉴스 타이틀만 검색
news_titles = soup.find_all("a", {"class": "news_tit"})

# 뉴스 제목만 텍스트로 추출
for title in news_titles:
    print(title.text.strip())

2.반정형 데이터

반정형 데이터에는 몇가지 형태가 존재하고 이에따라 수집방식이 다양하나, 그 중 JSON과 XML형식으로 되어있는 반정형 데이터를 수집하는 코드를 제시하겠다

본격적으로 아래에 코드를 설명하겠다

1) JSON 형식 / Python의 requests라이브러리 사용

import requests

# JSON 데이터를 가져올 URL 설정
url = 'https://jsonplaceholder.typicode.com/posts/1'

# request의 .get()함수를 사용하여 HTTP 요청
response = requests.get(url)

# response의 .json()함수를 사용하여 데이터 파싱
json_data = response.json()

# 파싱된 데이터 출력
print(json_data)

2) XLM형식 / xml.etree.ElementTree 모듈 사용

import requests
import xml.etree.ElementTree as ET

# XML 데이터를 가져올 URL 설정
url = 'https://www.example.com/data.xml'

# requests의 .get()함수를 사용하여 HTTP 요청 보내기
response = requests.get(url)

# ET의 .fromstring()함수를 사용하여 XML 데이터 파싱
root = ET.fromstring(response.content)

# 원하는 엘리먼트 찾기
for item in root.findall('.//item'):
    title = item.find('title').text
    description = item.find('description').text
    print(f'Title: {title}, Description: {description}')

3.반정형 데이터

from selenium import webdriver

url = 'https://example.com'
driver = webdriver.Chrome()  # 또는 다른 웹 드라이버를 선택

driver.get(url)

# 필요한 작업 수행(아래는 모든 링크의 텍스트 출력하는 예시)
for link in driver.find_elements_by_tag_name('a'):
    print(link.text)

driver.quit() # webdriver종료하고 브라우저를 닫는 함수
profile
Data Scientist

0개의 댓글