[AIVLE SCHOOL] 데이터 수집 (5) - 크롤링4

춤추는 머쉬룸·2024년 10월 4일

AIVLE SCHOOL 6기

목록 보기
39/80
post-thumbnail

10/4 4세션

A. HTML

A-1. Html 구성요소

  • Document : 한페이지를 나타내는 단위
  • Element : 하나의 레이아웃을 나타내는 단위 : 시작태그, 끝태그, 텍스트로 구성
  • Tag : 엘리먼트의 종류를 정의 : 시작태그(속성값), 끝태그
  • Attribute : 시작태그에서 태그의 특정 기능을 하는 값
    • id : 웹 페이지에서 유일한 값
    • class : 동일한 여러개의 값 사용 가능 : element를 그룹핑 할때 사용
    • attr : id와 class를 제외한 나머지 속성들 : src, href ...
  • Text : 시작태그와 끝태그 사이에 있는 문자열
  • 엘리먼트는 서로 계층적 구조를 가짐

B. CSS Selector

  1. Tag Selector
    <div> 등 태그 이름

  2. ID Selector

  • # 을 붙여서 아이디 이름으로 선택
  • 아이디는 웹 페이지 내에서 유일한 값
  1. Class Selector
    . 을 붙여서 클래스 이름으로 선택

  2. not Selector

  • 셀렉터로 엘리먼트를 하나만 제거
  • :not
  1. nth-child Selector
  • nth 는 n번째
  • n번째 엘리먼트가 설정한 셀렉터와 일치하면 선택
  • .ds:nth-child(3) : ds 클래스들 중 3번째 선택

C. 정적 페이지 크롤링

  • 페이지 요청 시 json 이 아닌 html 형태로 반환하면 정적 페이지일 가능성이 높다
  • html 은 BeautifulSoup 으로 파싱
  • BeautifulSoup 의 select() : 여러 개의 엘리먼트를 선택해서 리스트로 출력
  • BeautifulSoup 의 select_one() : 한 개의 엘리먼트를 선택해서 Tag 객체로 출력

TIP! 개발자도구에서 Copy Selector 를 하면 자동으로 셀렉터를 만들어준다!
(Id 등의 값은 매번 바뀌기 때문에 지워도 된다.)

> dom = BeautifulSoup(response.text, 'html.parser')

> selector = '.fds-grid-layout-keyword.fds-refine-query-grid > div:nth-child(1) > div:nth-child(1) > a > span'
> dom.select(selector)

[<span class="fds-keyword-text caFtNK02uvpIAGBLzVTS">삼성전자 주가</span>]

D. 이미지 다운로드

import os
from PIL import Image as pil
  • os : 파일 시스템을 파이썬으로 다루기
  • PIL : pillow, 이미지 다루기
# make directory
> path = 'data'
> os.makedirs(path, exist_ok=True)

> link = df.loc[0, 'image']
'https://image.celltrionbeauty.com/attach/item/DL2024030707/DL2024030707-listMedium.jpg'

> filename = 'test'
> filelink = f'{path}/{filename}.jpg'

> response = requests.get(link) # 셀트리온의 파일 경로로 이미지 가져오기. response 에 이미지가 담김(메모리)

> with open(filelink, 'wb') as file:
    file.write(response.content)
  • 이미지를 가져오는 requests 를 했으므로 이미지를 가져오고 ram 에 저장됨. 이를 파일 형태 (SSD) 로 저장함.
  • os.makedirs() : 현재 경로에 폴더 만들기
  • with open(filelink, 'wb') as file : 파일을 열고, 작업이 끝나면 파일을 자동으로 닫아주는 역할
  • wb : 바이너리 쓰기모드
  • file.write() : response.content에 들어 있는 데이터를 파일에 쓰기
pil.open(filelink)
  • pil.open() : 이미지를 셀 상에 띄우기

E. 크롤링 정책

사이트의 robots.text 파일 확인

0개의 댓글