연랩

[Microsoft AI School 6기] 1/31(28일차) 정리 - 크롤링, Hugging Face 본문

MS AI school 6기

[Microsoft AI School 6기] 1/31(28일차) 정리 - 크롤링, Hugging Face

parkjiyon7 2025. 1. 31. 17:55

웹 크롤링

 

크롤링

 

웹 크롤링 vs 웹 스크래핑

 

웹 크롤링 vs 웹 스크래핑

 

 

크롤링 주의 사항

 

법적 주의 사항

- 웹사이트 콘텐츠는 대부분 저작권으로 보호됨

- 상당한 투자와 노력으로 구축된 데이터베이스는 제작자의 권리가 인정됨

- 무단 크롤링은 저작권법과 부정경쟁방지법 위반이 될 수 있음

 

기술적 주의 사항

과도한 요청으로 서버에 부담을 주지 않도록 크롤링 간격 조정

-> 과도한 요청 시 영업 방해로 인정될 수 있음

- robots.txt 파일의 크롤링 규칙 확인 및 준수

- 기술적 제한을 우회하는 행위 금지

 

윤리적 고려사항

- 상업적 목적으로 사용 시 저작권자의 허가 필요

- 경쟁 업체의 데이터를 무단으로 활용하지 않도록 주의

 

robot.txt 확인 방법

웹브라우저 주소창에 해당 웹사이트 주소 뒤에 /robots.txt를 입력하여 robots.txt 파일 다운로드

ex) http://www.naver.com/robots.txt

 

  • User-agent : 규칙을 적용할 크롤러
  • Disallow : 접근 차단할 경로
  • Allow : 접근 허용할 경로
  • Crawl-delay : 크롤링 요청 간 대기 시간(초)

robot.txt는 권고 사항이며 강제성은 없음 이 규칙을 준수하는 것은 웹 크롤링의 에티켓이나, 법정 분쟁 발생 시에는 고려 대상이 될 수 있음

 

 

크롤링을 위한 웹페이지 유형

 

웹페이지 유형

 

동적 페이지로는 정적 페이지 가능

정적 페이지로는 동적 페이지 불가능

 

동적 페이지 크롤링

  1. 웹드라이버 생성
  2. 웹드라이버의 브라우저를 이용하여 목표 URL로 이동
  3. 동적 콘텐츠 로딩
  4. 필요 시 상호 작용(클릭, 스크롤, 검색 등)
  5. 데이터 추출
  6. 데이터 저장

 

실습

 

selenium 설치

 

selenium 설치

 

pip show selenium

으로 버전 확인 가능

 

웹 드라이버 객체 생성

크롬 브라우저를 조작하기 위한 웹드라이버 객체를 생성

 

웹 드라이버 객체 생성

 

driver가 브라우저 조작을 위한 객체

이때, 브라우저를 닫으면 안된다

pip install typing_extensions를 요구하면 설치하여 주면 된다

 

위 사진의 코드를 실행하면 아래와 같은 브라우저 창이 뜬다

 

브라우저

 

브라우저 제어

 

브라우저 제어

 

위의 명령어로 브라우저를 제어할 수 있다

 

원하는 페이지로 이동

driver.get()

 

원하는 페이지로 이동

 

원하는 창으로 이동

 

이전 페이지로 이동

 

이전 페이지로 이동

 

새로 고침

새로 고침

 

웹드라이버로 생성한 창 종료

 

창 종료

 

NoSuchWindowException 에러의 경우 웹드라이버로 생성한 브라우저를 닫았을 때 발생한다

 

 

요소 가져오기

 

웹페이지의 구성 요소

 

웹페이지 구성 요소

 

브라우저에서 F12를 누르면 elements를 통해 태그 확인 가능

  • 태그: <p>, </p>
  • 요소: <p> hello </p>
  • 속성: src='img.png"
  • 내용: hello

- 크롤링 시 요소를 잘 찾는 것이 중요하다

 

css 선택자

 

css 선택자

 

웹 브라우저에서 원하는 컨텐츠에서

오른쪽 마우스 클릭 > 검사

를 하면 선택자를 확인할 수 있다

 

형제 선택자

- 인접 형제 선택자(Adjacent Sibling Selector)

선택자1+선택자2

 

- 일반 형제 선택자(General Sibling Selector)

선택자1 ~ 선택자2

 

 

브라우저 가져오기

앞서 실습한 것과 같이 우선, 브라우저를 가져와 웹사이트에 연결한다

 

요소 가져오기

 

 

검색 자동화

 

검색창 지정 -> 검생창 클릭-> 검색어 입력 -> 엔터키 입력

 

 

검색창 선택하기

 

검색창 선택하기

 

원하는 요소에서 마우스 오른쪽을 누르거나,

F12 창의 좌측 상탄 아이콘 클릭 후 원하는 요소를 선택하면 html의 어디에 있는 지 알 수 있다

검색창의 경우, input id 태그로 되어 있는 것을 알 수 있다

class로 찾을 경우 search_input 선택 후 ctrl+f를 눌러 해당 class로 되어 있는 요소가 몇개인지를 알 수 있다

 

html

 

웹 요소를 지정하는 방법 지정

  • By.CSS_SELECTOR
  • By.ID 
  • By.CLASS_NAME 
  • By.NAME 
  • By.XPATH 
  • By.LINK_TEXT 
  • By.PARTIAL_LINK_TEXT 
  • By.TAG_NAME

 

검색창 선택하기

 

즉, 여기에서는 By.ID, 'query' 도 가능

 

 

검색창 클릭

 

검색창 클릭

 

검색창 클릭

 

 

검색어 입력

 

검색어 입력

 

검색어 입력

 

 

엔터키 입력

 

엔터키 입력

 

'\n'으로도 가능하다

 

엔터키를 이용하여 검생

 

 

브라우저 닫기

 

브라우저 닫기

 

사실 아래의 명령어로 한번에 검색어를 입력하고 검색할 수 있다

 

검색

 

 

실습 - 네이버 증권 뉴스 크롤링

 

네이버페이 증권

 

위의 링크에서 

제목  
상세페이지링크  
내용  
언론사  
날짜  
-> 엑셀로 정리

 

 

브라우저 열기 -> 웹페이지 내용

 

웹페이지 이동

 

 

요소 선택하기

 

원하는 부분을 선택하고 몇개인지 확인하기 위해 ctrl+f를 통해 검색

 

html

 

class인 block1을 통해 제목 등 내용을 알 수 있으므로 이를 선택하여 준다

 

요소 선택하기

 

텍스트로 요소 가져오기

 

해당 요소에서 반복문을 통해 제목, 날짜 등의 요소를 각각 가져 온다

태그 사이의 텍스트를 가져오기 위해 .text 사용

 

텍스트 추출

 

article 객체에서 articleSubject(제목) 만을 text로 가져온다

 

정보 가져오기

 

이와 마찬가지의 방법으로 요약, 언론사, 날짜를 가지고 온다.

 

정보 가져오기

 

링크 가져오기

 

링크

 

링크의 경우 제목 아래에 자식으로 존재함을 알 수 있다

참고) 직계가 아닌 경우 자손(조상-자손), 직계인 경우 자식(부모-자식)이라고 함

 

자식 관계

 

articleSubject>a를 통해 articleSubject 아래의 a 태그를 가져올 수 있다.

get_attribute()를 사용하면 된다

 

링크 가져 오기

 

 

파일로 정보 저장

 

list에 수집한 데이터 저장

 

파일에 데이터 저장

 

데이터 프레임으로 변경

 

데이터프레임으로 파일 변경

 

파일로 저장

 

파일로 저장

 

만일, 모듈이 없는 경우,

pip install openpyxl을 해주면 된다

 

파일을 확인하면 다음과 같다

 

파일로 정보 저장

 

 

추가 실습

 

날짜별로 되어 있는 url 이용 

 

날짜 별 검색

 

날짜별 검색

 

셀 합치기

 

셀 합치기

 

 

날짜 별, 모든 페이지 가져오기

 

- 날짜별로 페이지 수가 달라서 for문 사용이 힘듦

-> while 문 활용

 

마지막 페이지는 '맨뒤'가 없음

 

날짜별로 모든 페이지 불러오기

 

날짜별로 모든 페이지 불러오기

 

각 날짜로 정리된 파일을 받을 수 있다.

 

참고)

Azure 일반 가상 머신과 Machine learning studio 차이

 

- Azure 일반 가상 머신이 자유도가 높음

- Machine learning studio의 컴퓨팅의 경우

머신 러닝 패키지가 깔려 있음, machine learning studio와 연동이 됨

 

 

 

Hugging Face

 

 

Hugging Face

 

Hugging Face는 2016년에 설립된 이후로 인공지능 분야에서 주목을 받고 있는 인공지능 전문 회사

 

  • 2016년 프랑스 기업가들인 Clément Delangue, Julien Chaumond, Thomas Wolf에 의해 뉴욕에서 설립
  • 최초에는 10대를 위한 챗봇앱을 개발 
  • Hugging Face라는 이름은 이모지에서 유래
  • 챗봇을 구성하는 모델을 오픈소스화 한 후로 회사를 machine learning의 플랫폼을 제공하는 회사로 pivot
  • Transformers library를 릴리즈하면서 본격적으로 알려지게 됨
  • BigScience Research Workshop을 개최하고 BLOOM이라는 multilingual large language model을 제작
  • Gradio 인수
  • 2023년 Series D 펀딩

GitHub에서 Hugging Face와 매우 유사한 서비스를 준비중, 현재 beta 진행 중

 

Introducing GitHub Models: A new generation of AI engineers building on GitHub - The GitHub Blog
 

Introducing GitHub Models: A new generation of AI engineers building on GitHub

We are enabling the rise of the AI engineer with GitHub Models – bringing the power of industry leading large and small language models to our more than 100 million users directly on GitHub.

github.blog

 

Hugging Face의 Transformers 라이브러리는 자연어 처리(NLP) 및 기타 AI 작업을 위한 강력한 도구


Hugging Face Spaces

 

- 인터랙티브 애플리케이션: Hugging Face Spaces는 Gradio와 Streamlit을 기반으로 한 머신러닝 애플리케이션을 쉽게 구축하고 공유할 수 있는 플랫폼. 개발자는 자신의 모델을 웹 애플리케이션 형태로 제공 가능

- 쉬운 배포: 사용자는 몇 가지 간단한 단계만으로 자신의 애플리케이션을 배포할 수 있으며, 이를 통해 다른 사용자들과 모델의 기능을 쉽게 공유할 수 있음

- 커스터마이즈 가능: 개발자는 자신만의 UI를 설계하고, 사용자와의 상호작용을 통해 모델을 시연할 수 있음. 이는 교육, 연구, 프로토타입 제작 등 다양한 용도로 활용 가능.

- 커뮤니티와의 연결: Hugging Face Spaces는 사용자들이 만든 애플리케이션을 탐색하고, 피드백을 주고받을 수 있는 공간 제공. 이는 사용자 간의 소통 과 협업을 촉진

 

-> 모델을 만들어서 시현할 수 있는 장점이 있음

 

핵심 서비스

Hugging face 대표적인 서비스는 models, datasets, spaces

 

Hugging Face

 

Hugging Face tasks

 

Tasks - Hugging Face
 

Tasks - Hugging Face

Tasks Hugging Face is the home for all Machine Learning tasks. Here you can find what you need to get started with a task: demos, use cases, models, datasets, and more! Multimodal Natural Language Processing Computer Vision Audio Tabular Reinforcement Lear

huggingface.co

 

Hugging Face에서는 다양한 인공지능 모델을 분야별로 체계적으로 분류해서 사용자들이 손쉽게 찾아볼 수 있도록 되어 있다.

 

또한 여러 코드들을 활용할 수 있는데,

Tensorflow, Pytorch 등 무엇을 활용할 지에 대한 가이드를 transformers에서 알 수 있다

 

https://huggingface.co/docs/transformers/index
 

🤗 Transformers

Efficient training techniques

huggingface.co

 

Hugging face의 경우 spaces에서 직접 모델을 돌려 볼 수 있는데, 요금제에 따라 다른 하드웨어를 사용할 수 있다

 

Zero

 

위는 zero 요금제에서 돌아가고 있다는 뜻이다

 

이미지 분류

이미지 분류는 전체 이미지에 레이블 또는 클래스를 할당하는 작업

각 이미지에는 하나의 클래스만 있을 것으로 예상

이미지 분류 모델은 이미지를 입력으로 받아 해당 이미지가 속한 클래스에 대한 예측을 반환

- 확률로 나온다

 

이미지 분류

 

Image Feature Extraction

이미지 특징 추출은 컴퓨터 비전 모델에서 학습한 특징을 추출하는 작업

 

이미지 특징 추출

 

이미지 분류를 하기 위해서는 이미지 특징 추출을 할 필요성이 있다.

- ex) 귀가 길면 토끼

 

Image Segmentation

이미지를 세그먼트로 나누어 이미지의 각 픽셀을 객체에 매핑하는 작업

인스턴스 세그멘테이션, 팬옵틱 세그멘테이션, 의미론적 세그멘테이션과 같은 여러 변형이 있음

 

Object Detection

객체 탐지 모델은 사용자가 특정 정의된 클래스의 객체를 식별할 수 있도록 함

객체 탐지 모델은 이미지 를 입력으로 받아 감지된 객체에 대한 경계 상자와 레이블이 포함된 이미지를 출력

 

object detection

 

Zero-Shot Image Classification

제로샷 이미지 분류는 모델 훈련 중에 이전에 보지 못한 클래스를 분류하는 작업

사전 훈련이나 지식 없이 이미지를 여러 클래스 중 하나로 분류하는 컴퓨터 비전 작업

 

Fill-Mask

마스크드 언어 모델링은 문장의 일부 단어를 마스킹하고 그 마스크를 대체할 단어를 예측하는 작업

이러한 모델은 모델이 훈련된 언어에 대한 통계적 이해를 얻고자 할 때 유용

 

-> space를 통해 여러 모델을 체험할 수 있도록 할 수 있으며 이러한 space의 근간은 gradio이다

 

Datasets

- Hugging Face Hub는 번역, 자동 음성 인식, 이미지 분류와 같은 다양한 작업을 위한 커뮤니티 큐레이션 데이 터셋을 많이 호스팅하고 있다.

- 데이터셋 카드에 포함된 정보와 함께, GLUE*와 같은 많은 데이터셋은 데 이터를 전시하기 위한 데이터셋 뷰어를 포함한다

 

참고) 마크다운

Markdown 파일은 간단한 기호를 사용해서 텍스트를 서식화할 수 있는 텍스트 파일로서, 제목, 굵은 글씨, 기 울임 글씨, 리스트, 링크 등을 쉽게 만들 수 있음

- 주로 .md 확장자 사용

 

Parquet

- Parquet는 대규모 데이터셋의 쿼리 및 처리를 위해 최적화된 열 기반 저장 형식

- Parquet는 빅 데이터 처리 및 분석에 널리 사용되며, 데이터 처리 및 머신러닝에서도 인기

 

Spaces

Hugging Face Spaces는 ML 기반 데모를 몇 분 안에 쉽게 생성하고 배포할 수 있게 해준다

Hugging Face > Spaces > create new space

 

spaces

 

- space의 겨우 디버깅이 불가능하다

하단의 create을 통해 space를 create한다

 

gradio

 

gradio의 경우 파일명은 항상 app.py

create app.py 클릭

위의 샘플 코드를 넣고 commit

 

spaces

 

상단의 test20250131을 클릭하면 space로 이동이 가능하ek

 

spaces

 

혹은 하단의 링크에서 샘플들을 구할 수 있다.

 

Docker Spaces Examples
 

Docker Spaces Examples

Collaborate on models, datasets and Spaces

huggingface.co

 

이중 gradio 모델을 찾아서 활용해 보았다

 

 

Gradio Spaces
 

Gradio Spaces

Gradio Spaces Gradio provides an easy and intuitive interface for running a model from a list of inputs and displaying the outputs in formats such as images, audio, 3D objects, and more. Gradio now even has a Plot output component for creating data visuali

huggingface.co

 

해당 사이트에서 핫도그 모듈을 받아서 app.py에 추가해 주었다

 

 

requirements

 

module이 없다고 뜨는 경우 requirements.txt 파일을 추가 해 transformers와 torch를 추가해 주었다

(사이트에 필요한 모듈 나와 있음)

 

spaces

 

spaces

 

핫도그인지 여부를 알려주는 space가 완성되었다

 

이외 여러 모듈들에 대해 공부하고 싶다면 아래의 사이트에 들어가보는 것을 추천한다

 

Hugging Face - Learn
 

Hugging Face - Learn

Open-Source AI Cookbook A collection of open-source-powered notebooks by AI builders, for AI builders.

huggingface.co

 

 

오늘의 간단한 후기

 

크롤링을 이용하여 다양한 애플리케이션을 제작하거나 정보를 얻는 데 활용할 수 있겠다는 생각이 들었다. 이를 활용한 프로젝트를 진행하여 보고 싶다. 또한 허깅 페이스에 모듈 등의 도구가 많아 ai 용 깃허브로 생각하고 다양하게 활용한다면 유용할 것 같다고 생각했다.

 

 

 

출처

 

[1] MDN Web Docs, "CSS 선택자 (CSS Selectors)," *Mozilla Developer Network*, https://developer.mozilla.org/ko/docs/Web/CSS/CSS_selectors (accessed Jan. 31, 2025).

[2] Naver Finance, "메인 뉴스," *Naver Finance*, https://finance.naver.com/news/mainnews.naver (accessed Jan. 31, 2025).

[3] GitHub, "Models Marketplace," *GitHub*, https://github.com/marketplace/models (accessed Jan. 31, 2025).

[4] GitHub, "Introducing GitHub Models," *GitHub Blog*, https://github.blog/news-insights/product-news/introducing-github-models/ (accessed Jan. 31, 2025).

[5] Scalable Path, "Hugging Face: Everything You Need to Know," *Scalable Path*, https://www.scalablepath.com/machine-learning/hugging-face (accessed Jan. 31, 2025).

[6] Hugging Face, "Tasks," *Hugging Face*, https://huggingface.co/tasks (accessed Jan. 31, 2025).

[7] Hugging Face, "Transformers Documentation," *Hugging Face*, https://huggingface.co/docs/transformers/index (accessed Jan. 31, 2025).

[8] Hugging Face, "Image Classification," *Hugging Face*, https://huggingface.co/tasks/image-classification (accessed Jan. 31, 2025).

[9] Hugging Face, "Image Feature Extraction," *Hugging Face*, https://huggingface.co/tasks/image-feature-extraction (accessed Jan. 31, 2025).

[10] Hugging Face, "Object Detection," *Hugging Face*, https://huggingface.co/tasks/object-detection (accessed Jan. 31, 2025).

[11] Hugging Face, "Spaces SDKs Docker Examples," *Hugging Face*, https://huggingface.co/docs/hub/en/spaces-sdks-docker-examples (accessed Jan. 31, 2025).

[12] Hugging Face, "Spaces SDKs Gradio," *Hugging Face*, https://huggingface.co/docs/hub/en/spaces-sdks-gradio (accessed Jan. 31, 2025).

[13] Hugging Face, "Learn," *Hugging Face*, https://huggingface.co/learn (accessed Jan. 31, 2025).

 

-If any problem for references, or any questions please contact me by comments.

-This content is only for recording my studies and personal profiles

 

일부 출처는 사진 내에 표기되어 있습니다

본문의 내용은 학습과 개인 profile 이외의 다른 목적이 없습니다

출처 관련 문제 있을 시 말씀 부탁드립니다

상업적인 용도로 사용하는 것을 금합니다

본문의 내용을 Elixirr 강의자료 내용(김자영, 김승준)을 기반으로 제작되었습니다

깃허브 소스코드의 내용을 담고 있습니다

본문의 내용은 MS AI School 6기의 강의 자료 및 수업 내용을 담고 있습니다

반응형