Ex01~02 크롤링 기초

박산해·2025년 3월 25일

Ex 01. 크롤링의 기초

import requests as req
#1. 특정 사이트 정보를 요청

대화 : req를 통해서 네이버 사이트좀 가져와줘!

요청 -> 응답 3가지 존재

200 -> 통신에 성공했다. 400, 500 -> 통신에 실패했다.

400 -> 요청하는 클라이언트의 문제 -> 요청하는 코드를 수정하면 가능하다.

500 -> 응답하는 서버의 문제

res = req.get("https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ssc=tab.nx.all&query=싱크홀&oquery=기아타이거즈&tqi=i%2B4apwqVN8Vsst7Nczossssssd4-342687")
#2. 수많은 응답속에 텍스트정보만 추출 = HTML 데이터
res.text
#3. String데이터를 컴퓨터가 이해할 수 잇도록 HTML로 변환 (parsing)
from bs4 import BeautifulSoup as bs
soup = bs(res.text,"lxml")
#4. 특정 태그를 수집

대화 : HTML데이터에서 a태그만 선택해줘

select(선택자) -> 선택자를 적을때는 반드시 정확하게 적어야 한다

news = soup.select("a.news_tit")
#5. HTML데이터에서 사람이 필요한 컨텐츠(글자)만 저장시킨다.
text = []
for i in news :
text.append(i.text)
text

이번 실습 정리

  • requests 라이브러리 => 사이트의 정보를 받아오는 라이브러리
  • BeautifulSoup 라이브러리 -> req로 받아온 텍스트 데이터를 컴퓨터가 이해 할 수 있는 HTML 변환 라이브러리
  • select("선택자") -> HTML데이터에서 특정 요소를 수집하는 방법
  • 반복문을 통해서 사람이 필요한 컨텐츠,속성들을 저장한다.

프로세스
1) 데이터 요청
2) 데이터 변환
3) 요소 수집
4) 요소 가공(컨텐츠,속성) 필요한 데이터만 추출
5) 가공된 데이터 활용(시각화, 파일로 저장, 인공지능 데이터 활용...)

Ex02. 멜론차트

import requests as req
from bs4 import BeautifulSoup as bs
#1. 사이트 정보 요청
req.get("https://www.melon.com/chart/index.htm")

응답이 406이 나온 이유 = 서버에서 브라우저가 아님을 감지

요청을 할 때 브라우저의 정보를 담아서 재 요청한다.

개발자도구 -> 네트워크 -> document문서 -> headers탭에 user-agent값을 불러온다.

요청을 할 때 해당 정보를 동반해서 보낸다 * headers안에 담아서 보내자!

browser = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"}
res = req.get("https://www.melon.com/chart/index.htm",headers = browser)
#2. HTMl 데이터로 변환
soup = bs(res.text, "lxml")
#3 가수 100명, 노래 100곡 수집 = 요소 수집

노래제목 수집

선택자를 분석할 때 class,id 구분자가 없다면 자식 선택자를 활용하자.

* 부모가 구분자가 있을 때 까지 분석해야한다. -> 범위를 좁히기 위해서

* 클래스값 중간에 공백 존재 = 클래스가 여러개 -> 공백을 지우고 클래스를 .으로 이어준다.

title = soup.select("div.ellipsis.rank01 > span > a")

가수이름 수집

singer = soup.select("div.ellipsis.rank02 > span > a")
#4. 데이터 검증(데이터의 개수, 중복여부)

데이터의 개수가 중요하다면 반드시 검증을 먼저하고 진행한다.

len(title)

크롤링 1회차 정리

  1. 크롤링 = 인터넷 상에 존재하는 데이터를 수집하는 기술
  2. requests = 파이썬에서 브라우저 역할을 대신하는 라이브러리
  • get("url") = 특정 사이트의 정보를 요청
  • .text = HTML 데이터만 추출은 가능 (타입이 String)
  1. bs = req로 받아온 text데이터를 HTML 데이터로 변환(파싱)
  • bs(res.text, "lxml")
  • String데이터가 HTML데이터로 변환
  • bs 객체화
  1. 요소 수집 = select("선택자")
  • 선택자는 최대한 정확하게 적는다(범위를 좁힌다.)
  • class, id가 있다면 바로 사용이 가능
  • 없는 경우에는 부모 태그를 활용한 계층선택자
  • 반드시 부모태그도 구분자가 있을 때 까지 분석한다
  • 클래스 중간에 공백이 있다면 = 복수의 클래스
  • 해결책 : 공백을 지우고 .으로 클래스를 연결한다.
  1. 데이터 검증
  • 수집하고자 하는 데이터가 개수가 중요한 경우
  • 데이터의 개수, 데이터의 중복여부

0개의 댓글