생성형 AI
- Upstage: 네이버에서 퇴사하고 만듦
- perplexity: 웹스크래핑에 좋음
- claude: 언어 하는 사람이 선호/ 번역, 요약/ 웹스크래핑 제일 못함
웹 스크래핑 수집 과정
웹스래핑 과정을 10가지 단계로 나열하고 안 되는 과정에 대한 피드백을 추가해서 작성할 것
위 과정을 mermaid 코드로 작성
`Mermaid` 코드
graph TD
A[1. 목표 데이터 정의] --> B[2. 웹 페이지 분석]
B --> C[3. 스크래핑 도구 선택]
C --> D[4. HTTP 요청 보내기]
D --> E[5. 데이터 추출]
E --> F[6. 데이터 정제]
F --> G[7. 데이터 저장]
G --> H[8. 오류 처리 및 예외 관리]
H --> I[9. 스크래핑 자동화]
I --> J[10. 법적 검토]
%% Feedback lines
subgraph Feedback
F1[목표 데이터가 불명확하면 데이터 누락 가능] --> A
F2[웹 페이지 구조를 잘못 분석하면 잘못된 데이터 추출 가능] --> B
F3[부적절한 도구 선택으로 인한 효율 저하 가능] --> C
F4[잘못된 요청으로 인해 페이지 불러오기 실패 가능] --> D
F5[잘못된 선택자로 인해 데이터 추출 실패 가능] --> E
F6[데이터 정제를 소홀히 하면 오류 발생 가능] --> F
F7[저장 형식 문제로 데이터 손실 가능] --> G
F8[예외 처리 부족으로 인해 스크래핑 중단 가능] --> H
F9[자동화 설정이 부적절하면 서버에 부하 발생 가능] --> I
F10[법적 검토 미흡 시 법적 문제 발생 가능] --> J
end
웹 크롤링 vs. 스크래핑
웹크롤링
- 인터넷 상에 존재하는 웹 페이지들을 자동으로 탐색 -> 원하는 데이터 수집하는 기술
- 웹 크롤러) (사이트 방문 -> 해당 페이지의 하이퍼링크 따라가며 새로운 페이지 찾음) 반복 -> 원하는 페이지 모두 수집
- 수집된 데이터 -> 검색엔진으로 사용되어 인덱싱 or 분석에 활용
웹 스크래핑
- 웹 페이지의 구조 분석, 웹페이지에서 필요한 데이터 추출하는 기술
- 웹 스크래퍼) 웹 페이지의 HTML 구조 파싱 -> 원하는 데이터 추출
- 추출된 데이터 -> 데이터베이스 or 파일로 저장하여 활용
API 통신 방식
- REST: 클라이언트/서버 접근 방식 기반 -> API의 프론트엔드와 백엔드 분리, 개발 및 구현에 상당한 유연성 제공
- RPC(원격 프로시저 호출): 여러 매개변수 보내고 결과를 받는 방식으로 작동
- SOAP: HTTP, SMTP, TCP 등 인터넷 전반에서 발견되는 다양한 통신 프로토콜 지원
- WebSocket: 브라우저와 서버 간의 지속적인 연결 ~> 데이터 교환하는 방법 제공
`request` ~> HTTP 요청
- HTTP 요청을 처리하는 라이브러리로 Python으로 요청 보내고 응답 받을 수 있음
- GET, POST, PUT, DELETE 등의 다양한 HTTP 메소드 사용
- 다양한 인증 방식과 SSL 인증서 검증 등의 기능 지원
HTTP 프로토콜
- 인터넷에서 데이터를 주고받기 위한 통신 규약 중 하나로, 웹 브라우저와 웹 서버 간에 사용
- 역할: 클라이언트와 서버 간의 데이터 통신을 가능하게 하는 것
- 클라이언트 -요청-> 서버 -응답-> 클라이언트
- 목적: 웹 페이지, 이미지, 비디오 등 다양한 미디어 자원 전송하는 것
HTTP 요청과 응답 메시지의 구조와 특징
- HTTP 요청 메시지: 요청 라인/ 헤더/ 본문
- 요청 라인: 요청 메소드/ 요청 URI/ HTTP 버전
- 헤더: 요청 메시지에 대한 정보
- 일반 헤더 필드/ 요청 헤더 필드/ 엔티티 헤더 필드
- 본문: 요청 메시지에 대한 추가 정보, 생략될 수 있음
HTTP 메소드의 기능과 사용 방법
GET | POST | |
전송방식 | URL 뒤에 파라미터 붙여서 데이터 전송 | HTTP 요청 본문에 데이터 실어서 전송 |
보안 | 노출되는 파라미터 O -> 보안적으로 취약 | 요청 본문에 데이터 실어서 전송 -> 보안적으로 안전 |
캐시 | 사용 O -> 동일한 URL에 대한 요청 캐시 O | 사용 X -> 항상 새로운 데이터 수신 |
용도 | 데이터를 요청할 때 사용 | 데이터를 전송할 때 사용 ex. 검색어 전송, 회원가입, 게시물 작성 |
쿼리 스트링(Query String)
- URL에 파라미터를 추가하여 요청을 보낼 때 사용되는 문자열
- "?" 다음에 오는 이름과 값이 쌍을 이루는 문자열로 구성
- 여러 개의 파라미터 연결하여 사용할 수 있고 각각의 파라미터 "&"로 구분
- ex. http://example.com/search?q=apple&category=fruit"
- q와 category: 파라미터 이름
- apple과 fruit: 해당 파라미터 값
- ex. http://example.com/search?q=apple&category=fruit"
- 웹 크롤링에서 웹 페이지의 특정 부분에 접근 or 검색어나 필터링 등의 조건 지정하여 데이터 수집
- GET 요청 메서드 사용하여 데이터 전송 -> 요청한 데이터 URL 상에 노출
- 보안상 민감한 정보를 쿼리 스트링에 담아서 전송 X -> POST 요청 메서드 사용하여 데이터 전송
웹사이트 데이터 수집 실습
- 생성형 AI(perplexity)를 사용하여 관심 있는 웹 사이트에서 데이터 수집하기
- 수집한 데이터를 SQLite Database에서 확인하기
한국경제신문에서 가상화폐 관련 뉴스 데이터 수집
1. 한국경제신문에 가상화폐 검색 > 도구 더보기 > 개발자 도구
개발자 도구 -> Mac 단축키: option + command + i
2. Network 탭 > Doc (Header, Payload, Preview, Response 확인)
Header의 General 내용과 Payload 내용 복사
예시 HTML 복사(Copy > Copy outerHTML)
3. 아래 내용을 perplexity에 넣기
다음 정보를 참고해서 데이터를 수집하는 파이썬 코드를 작성하고
데이터는 sqlitedb 에 저장하고 판다스로 읽어와서 확인하는 코드까지 작성할 것
// 헤더
Request URL:https://search.hankyung.com/search/news?query=%EA%B0%80%EC%83%81%ED%99%94%ED%8F%90&mediaid_clust=HKPAPER,HKCOM
Request Method:GET
Status Code:200 OK
Remote Address:104.18.0.245:443
Referrer Policy:strict-origin-when-cross-origin
// qayload
query: 가상화폐 mediaid_clust: HKPAPER,HKCOM
// 응답 일부
<li> <div class="txt_wrap"> <div class="thumbnail"> <a href="https://www.hankyung.com/article/2024082428897" target="_blank"><img src="//img.hankyung.com/photo/202408/99.36427503.3.jpg" alt="thumbnail" style="width: 100%; position: absolute; left: 0px; top: 50%; margin-top: -33px;"></a> </div> <a href="https://www.hankyung.com/article/2024082428897" target="_blank"> <em class="tit" data-pm="N">9월 금리인하 소식에…비트코인도 '들썩'</em> </a> <p class="txt"><strong class="keyword">가상화폐</strong> 대장주 비트코인이 급등하고 있다. 미국 기준 금리 인하가 가시권에 들어왔고 미 대선에서 무소속 로버트 케네디 주니어 후보가 도널드 트럼프 전 대통령을 지지하면서다. 23일(서부 시간) 낮 12시 30분 비트코인 1개당 가격은 24시간 전보다 5.82% 오른 6만3650달러(8455만원)에 거래됐다. 비트코인이 6만3000달러선에 오른 것은 지난 2일 이후 21일 만이다. 이날 6만 달러 초반대에서 등락하던 비트코인은 제롬 파월 미국 중앙은행(Fed) ...</p> <p class="info"> <span>한국경제</span> | <span class="date_time">2024.08.24 08:02</span> | 이송렬 </p> <div class="hash_wrap"> <span><a href="https://www.hankyung.com/tag/가상화폐">#<strong class="keyword">가상화폐</strong></a></span> <span><a href="https://www.hankyung.com/tag/대장">#대장</a></span> <span><a href="https://www.hankyung.com/tag/비트코인">#비트코인</a></span> <span><a href="https://www.hankyung.com/tag/9월">#9월</a></span> <span><a href="https://www.hankyung.com/tag/금리">#금리</a></span> <span><a href="https://www.hankyung.com/tag/인하">#인하</a></span> <span><a href="https://www.hankyung.com/tag/도널드-트럼프">#도널드 트럼프</a></span> </div> </div> </li>
4. SQLite로 DB 확인
29cm에서 Best 데이터 수집
후기
웹 스크래핑에 관심이 있어서 신청했는데 코드를 직접 작성하는 것이 아닌 생성형 AI가 코드를 작성하는 것이라 아쉬웠다
그래도 손쉽게 데이터를 수집할 수 있어서 좋았고 동적, 정적 웹 스크래핑 코드에 대해 더 자세히 뜯어보고 싶어졌다.
오늘 언급된 단어들 중 개념을 잘 모르고 낯선 단어들이 있었다.
selenium(셀리니움), Beautiful Soup(뷰티풀수프, 뷰슾)/ (LangChain)랭체인
위의 단어들과 perplexity가 작성해준 코드는 다음에 자세히 블로깅 해야겠다
출처
'🎸 기타' 카테고리의 다른 글
생성형 AI
- Upstage: 네이버에서 퇴사하고 만듦
- perplexity: 웹스크래핑에 좋음
- claude: 언어 하는 사람이 선호/ 번역, 요약/ 웹스크래핑 제일 못함
웹 스크래핑 수집 과정
웹스래핑 과정을 10가지 단계로 나열하고 안 되는 과정에 대한 피드백을 추가해서 작성할 것
위 과정을 mermaid 코드로 작성
Mermaid
코드
graph TD
A[1. 목표 데이터 정의] --> B[2. 웹 페이지 분석]
B --> C[3. 스크래핑 도구 선택]
C --> D[4. HTTP 요청 보내기]
D --> E[5. 데이터 추출]
E --> F[6. 데이터 정제]
F --> G[7. 데이터 저장]
G --> H[8. 오류 처리 및 예외 관리]
H --> I[9. 스크래핑 자동화]
I --> J[10. 법적 검토]
%% Feedback lines
subgraph Feedback
F1[목표 데이터가 불명확하면 데이터 누락 가능] --> A
F2[웹 페이지 구조를 잘못 분석하면 잘못된 데이터 추출 가능] --> B
F3[부적절한 도구 선택으로 인한 효율 저하 가능] --> C
F4[잘못된 요청으로 인해 페이지 불러오기 실패 가능] --> D
F5[잘못된 선택자로 인해 데이터 추출 실패 가능] --> E
F6[데이터 정제를 소홀히 하면 오류 발생 가능] --> F
F7[저장 형식 문제로 데이터 손실 가능] --> G
F8[예외 처리 부족으로 인해 스크래핑 중단 가능] --> H
F9[자동화 설정이 부적절하면 서버에 부하 발생 가능] --> I
F10[법적 검토 미흡 시 법적 문제 발생 가능] --> J
end
웹 크롤링 vs. 스크래핑
웹크롤링
- 인터넷 상에 존재하는 웹 페이지들을 자동으로 탐색 -> 원하는 데이터 수집하는 기술
- 웹 크롤러) (사이트 방문 -> 해당 페이지의 하이퍼링크 따라가며 새로운 페이지 찾음) 반복 -> 원하는 페이지 모두 수집
- 수집된 데이터 -> 검색엔진으로 사용되어 인덱싱 or 분석에 활용
웹 스크래핑
- 웹 페이지의 구조 분석, 웹페이지에서 필요한 데이터 추출하는 기술
- 웹 스크래퍼) 웹 페이지의 HTML 구조 파싱 -> 원하는 데이터 추출
- 추출된 데이터 -> 데이터베이스 or 파일로 저장하여 활용
API 통신 방식
- REST: 클라이언트/서버 접근 방식 기반 -> API의 프론트엔드와 백엔드 분리, 개발 및 구현에 상당한 유연성 제공
- RPC(원격 프로시저 호출): 여러 매개변수 보내고 결과를 받는 방식으로 작동
- SOAP: HTTP, SMTP, TCP 등 인터넷 전반에서 발견되는 다양한 통신 프로토콜 지원
- WebSocket: 브라우저와 서버 간의 지속적인 연결 ~> 데이터 교환하는 방법 제공
request
~> HTTP 요청
- HTTP 요청을 처리하는 라이브러리로 Python으로 요청 보내고 응답 받을 수 있음
- GET, POST, PUT, DELETE 등의 다양한 HTTP 메소드 사용
- 다양한 인증 방식과 SSL 인증서 검증 등의 기능 지원
HTTP 프로토콜
- 인터넷에서 데이터를 주고받기 위한 통신 규약 중 하나로, 웹 브라우저와 웹 서버 간에 사용
- 역할: 클라이언트와 서버 간의 데이터 통신을 가능하게 하는 것
- 클라이언트 -요청-> 서버 -응답-> 클라이언트
- 목적: 웹 페이지, 이미지, 비디오 등 다양한 미디어 자원 전송하는 것
HTTP 요청과 응답 메시지의 구조와 특징
- HTTP 요청 메시지: 요청 라인/ 헤더/ 본문
- 요청 라인: 요청 메소드/ 요청 URI/ HTTP 버전
- 헤더: 요청 메시지에 대한 정보
- 일반 헤더 필드/ 요청 헤더 필드/ 엔티티 헤더 필드
- 본문: 요청 메시지에 대한 추가 정보, 생략될 수 있음
HTTP 메소드의 기능과 사용 방법
GET | POST | |
전송방식 | URL 뒤에 파라미터 붙여서 데이터 전송 | HTTP 요청 본문에 데이터 실어서 전송 |
보안 | 노출되는 파라미터 O -> 보안적으로 취약 | 요청 본문에 데이터 실어서 전송 -> 보안적으로 안전 |
캐시 | 사용 O -> 동일한 URL에 대한 요청 캐시 O | 사용 X -> 항상 새로운 데이터 수신 |
용도 | 데이터를 요청할 때 사용 | 데이터를 전송할 때 사용 ex. 검색어 전송, 회원가입, 게시물 작성 |
쿼리 스트링(Query String)
- URL에 파라미터를 추가하여 요청을 보낼 때 사용되는 문자열
- "?" 다음에 오는 이름과 값이 쌍을 이루는 문자열로 구성
- 여러 개의 파라미터 연결하여 사용할 수 있고 각각의 파라미터 "&"로 구분
- ex. http://example.com/search?q=apple&category=fruit"
- q와 category: 파라미터 이름
- apple과 fruit: 해당 파라미터 값
- ex. http://example.com/search?q=apple&category=fruit"
- 웹 크롤링에서 웹 페이지의 특정 부분에 접근 or 검색어나 필터링 등의 조건 지정하여 데이터 수집
- GET 요청 메서드 사용하여 데이터 전송 -> 요청한 데이터 URL 상에 노출
- 보안상 민감한 정보를 쿼리 스트링에 담아서 전송 X -> POST 요청 메서드 사용하여 데이터 전송
웹사이트 데이터 수집 실습
- 생성형 AI(perplexity)를 사용하여 관심 있는 웹 사이트에서 데이터 수집하기
- 수집한 데이터를 SQLite Database에서 확인하기
한국경제신문에서 가상화폐 관련 뉴스 데이터 수집
1. 한국경제신문에 가상화폐 검색 > 도구 더보기 > 개발자 도구
개발자 도구 -> Mac 단축키: option + command + i
2. Network 탭 > Doc (Header, Payload, Preview, Response 확인)
Header의 General 내용과 Payload 내용 복사
예시 HTML 복사(Copy > Copy outerHTML)
3. 아래 내용을 perplexity에 넣기
다음 정보를 참고해서 데이터를 수집하는 파이썬 코드를 작성하고
데이터는 sqlitedb 에 저장하고 판다스로 읽어와서 확인하는 코드까지 작성할 것
// 헤더
Request URL:https://search.hankyung.com/search/news?query=%EA%B0%80%EC%83%81%ED%99%94%ED%8F%90&mediaid_clust=HKPAPER,HKCOM
Request Method:GET
Status Code:200 OK
Remote Address:104.18.0.245:443
Referrer Policy:strict-origin-when-cross-origin
// qayload
query: 가상화폐 mediaid_clust: HKPAPER,HKCOM
// 응답 일부
<li> <div class="txt_wrap"> <div class="thumbnail"> <a href="https://www.hankyung.com/article/2024082428897" target="_blank"><img src="//img.hankyung.com/photo/202408/99.36427503.3.jpg" alt="thumbnail" style="width: 100%; position: absolute; left: 0px; top: 50%; margin-top: -33px;"></a> </div> <a href="https://www.hankyung.com/article/2024082428897" target="_blank"> <em class="tit" data-pm="N">9월 금리인하 소식에…비트코인도 '들썩'</em> </a> <p class="txt"><strong class="keyword">가상화폐</strong> 대장주 비트코인이 급등하고 있다. 미국 기준 금리 인하가 가시권에 들어왔고 미 대선에서 무소속 로버트 케네디 주니어 후보가 도널드 트럼프 전 대통령을 지지하면서다. 23일(서부 시간) 낮 12시 30분 비트코인 1개당 가격은 24시간 전보다 5.82% 오른 6만3650달러(8455만원)에 거래됐다. 비트코인이 6만3000달러선에 오른 것은 지난 2일 이후 21일 만이다. 이날 6만 달러 초반대에서 등락하던 비트코인은 제롬 파월 미국 중앙은행(Fed) ...</p> <p class="info"> <span>한국경제</span> | <span class="date_time">2024.08.24 08:02</span> | 이송렬 </p> <div class="hash_wrap"> <span><a href="https://www.hankyung.com/tag/가상화폐">#<strong class="keyword">가상화폐</strong></a></span> <span><a href="https://www.hankyung.com/tag/대장">#대장</a></span> <span><a href="https://www.hankyung.com/tag/비트코인">#비트코인</a></span> <span><a href="https://www.hankyung.com/tag/9월">#9월</a></span> <span><a href="https://www.hankyung.com/tag/금리">#금리</a></span> <span><a href="https://www.hankyung.com/tag/인하">#인하</a></span> <span><a href="https://www.hankyung.com/tag/도널드-트럼프">#도널드 트럼프</a></span> </div> </div> </li>
4. SQLite로 DB 확인
29cm에서 Best 데이터 수집
후기
웹 스크래핑에 관심이 있어서 신청했는데 코드를 직접 작성하는 것이 아닌 생성형 AI가 코드를 작성하는 것이라 아쉬웠다
그래도 손쉽게 데이터를 수집할 수 있어서 좋았고 동적, 정적 웹 스크래핑 코드에 대해 더 자세히 뜯어보고 싶어졌다.
오늘 언급된 단어들 중 개념을 잘 모르고 낯선 단어들이 있었다.
selenium(셀리니움), Beautiful Soup(뷰티풀수프, 뷰슾)/ (LangChain)랭체인
위의 단어들과 perplexity가 작성해준 코드는 다음에 자세히 블로깅 해야겠다
출처