HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🚕
크롤링으로 만드는 데이터베이스
/
🗃️
백업
/
🗃️
파이썬 왕초보의 크롤링 도전: 웹 데이터 수집부터 저장까지(최종본, 배포용, 퇴고용)
/
📝
3. 웹 크롤링 (이혜정, 정서영)
/
📔
초안(Draft)
📔

초안(Draft)

3.1 HTML/CSS/XPATH

3.1.1 HTML이란?

  • HTML은 Hyper Text Markup Language의 약자로 웹 페이지의 구조와 내용을 표현하기 위해 개발된 마크업 언어입니다.
  • HTML은 '.html'과 같은 확장자를 가지며, 태그(Tag)와 속성(Attribute), 그리고 태그(Tag)와 속성(Attribute)으로 조합인 요소(Element)로 이루어져 있습니다.
  • 아래 코드는 이번 챕터에서 예시로 사용할 아주 간단한 HTML 코드입니다.
<!DOCTYPE html> <html> <head> <title>멋쟁이 사자처럼 데이터분석스쿨 1기</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } h1 { color: #333; } p { color: #666; } .highlight { background-color: skyblue; } </style> </head> <body> <header> <h1>환영합니다!</h1> </header> <nav> <ul> <li><a href="#홈">홈</a></li> <li><a href="#소개">소개</a></li> <li><a href="#Bookstore">Bookstore</a></li> <li><a href="#서비스">서비스</a></li> </ul> </nav> <main> <section> <h2>소개</h2> <p>안녕하세요! 멋쟁이사자처럼 데이터분석스쿨 1기입니다.</p> <p class="highlight">이 페이지는 HTML과 CSS로 만들어졌습니다.</p> </section> <section> <h2>Bookstore</h2> <bookstore> <book category="fiction"> <p> <booktitle lang="en">Harry Potter</booktitle> <author>J.K. Rowling</author> <price>10.99</price> </p> </book> <book category="fiction"> <p> <booktitle lang="en">The Hobbit</booktitle> <author>J.R.R. Tolkien</author> <price>12.99</price> </p> </book> <book category="non-fiction"> <p> <booktitle lang="en">The Art of War</booktitle> <author>Sun Tzu</author> <price>8.99</price> </p> </book> </bookstore> </section> <section> <h2>서비스</h2> <ul> <li>웹 개발</li> <li>UI/UX 디자인</li> <li>맞춤형 솔루션 제공</li> </ul> </section> </main> <footer> <p>&copy; 2023 멋쟁이 사자처럼 데이터분석스쿨 1기. All rights reserved.</p> </footer> </body> </html>
예시.html
2.3KB

요소(Element)

  • 요소는 태그와 속성의 조합으로, 시작 태그와 종료 태그 사이에 있는 내용은 요소의 내용(content)로 여겨집니다.
  • 아래와 같이 태그와 속성들을 통해 요소가 표현됩니다.
<section> <h2>소개</h2> <p>안녕하세요! 멋쟁이사자처럼 데이터분석스쿨 1기입니다.</p> <p class="highlight">이 페이지는 HTML과 CSS로 만들어졌습니다.</p> </section>

태그(Tag)

  • 웹 페이지의 구조를 정의하는 태그는 '<'와 '>' 사이의 키워드로 표현되며, 보통 시작 태그(시작태그)와 종료 태그(종료 태그)로 구성됩니다.
  • 시작 태그는 요소(Element)의 시작을, 종료 태그는 요소(Element)의 끝을 알려줍니다. 하지만 어떤 태그들은 종료 태그가 필요 없는 빈 요소로 사용될 수도 있습니다.(br태그, img태그, input 태그 등)
  • 이미지로 만들어서 넣기(태그의 종류)
  • head: 웹 페이지의 제목을 정의합니다.
  • title: 웹 페이지의 제목을 정의합니다.
  • body: 웹 페이지의 본문을 정의합니다.
  • header: 웹 페이지의 머리글 정의합니다.
  • nav: 네비게이션 메뉴를 표현합니다.
  • main: 웹 페이지의 주요 콘텐츠를 포함한 section을 감싸고 있습니다.
  • section: 섹션의 제목과 내용을 담습니다.
  • p: 단락을 나타내며, 각 섹션의 내용을 표시합니다.
  • footer: 웹 페이지의 바닥글을 정의합니다.
  • h1: 웹 페이지의 큰 제목을 정의합니다.
  • h2: 웹 페이지에서 h1 다음으로 큰 제목을 정의합니다.
  • h3: 웹 페이지에서 h2 다음으로 큰 제목을 정의합니다.
  • h4: 웹 페이지에서 h3 다음으로 큰 제목을 정의합니다.
  • h5: 웹 페이지에서 h4 다음으로 큰 제목을 정의합니다.
  • h6: 웹 페이지에서 h5 다음으로 큰 제목을 정의합니다.
  • div: 문서를 구획으로 나누는 역할을 합니다.
  • table: 표를 생성하는 역할을 합니다.
  • img: 이미지를 정의합니다.
  • a: href 속성을 추가하여 링크의 url을 지정할 수 있습니다.

속성(Attribute)

  • 요소에 대한 추가 정보를 제공하고 동작을 제어하는 역할을 하는 속성은 시작 태그에 추가되며, 이름과 값으로 구성됩니다.
  • 이미지로 만들어서 넣기(속성 설명)
    • class: HTML 요소에 대한 CSS 클래스를 지정합니다. 같은 클래스를 가진 요소들을 그룹화하여 스타일을 적용하거나, 선택할 때 사용됩니다.
    • id: HTML에 고유한 식별자를 지정합니다. 고유한 ID를 사용하여 특정 요소를 선택하거나 CSS에서 스타일을 적용할 수 있습니다.
    • src: 이미지, 오디오, 비디오 등과 같은 미디어 요소의 소스 파일 경로를 지정합니다.
    • href: 링크요소(a 태그)에서 링크 대상 URL을 지정합니다.
    • alt: 이미지 요소(img 태그)에서 대체 텍스트를 지정합니다. 이미지가 로드되지 못할 경우 텍스트로 대체되어 텍스트 기반 브라우저나 스크린 리더가 이를 읽을 수 있게 합니다.
    • disabled: 입력 요소(input태그, button태그, select태그 등)을 비활성화합니다. 사용자 상호작용이 불가능해지며, 시각적으로도 다른 상태로 표시될 수 있습니다.
    • style: HTML 요소에 직접 CSS 스타일을 적용합니다. style 속성 값은 CSS 속성과 값의 쌍으로 구성되며, 해당 요소에만 스타일이 적용됩니다.
    • target: 링크 요소(a 태그)에서 링크를 열 위치를 지정합니다. 예를 들어 _blank로 설정하면 링크가 새 창이나 탭에서 열리게 됩니다.
 
참고 사이트
  • https://ko.wikipedia.org/wiki/HTML
  • https://namu.wiki/w/HTML
 

3.1.2 CSS란?

  • 아래 코드는 예시 페이지의 CSS 부분만 가져온 것입니다.
  • CSS는 아래 예시와 같이 style 태그 내에 직접 작성하거나 HTML 문서와 별도로 외부 CSS 파일로 작성하여 사용할 수 있습니다.
<!DOCTYPE html> <html> <head> <title>멋쟁이 사자처럼 데이터분석스쿨 1기</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } h1 { color: #333; } p { color: #666; } .highlight { background-color: skyblue; } </style> </head>
 
CSS(Cascading Style Sheets)는 HTML 요소의 스타일, 레이아웃 등의 디자인을 정의하기 위한 스타일 시트 언어로, 선언부(Declaration), 선택자(Selector), 속성(Properties), 값(Values) 으로 구성되어 있습니다.

선언부(Declaration)

  • 선택자와 속성, 값의 쌍으로 구성됩니다. 특정 요소에 적용되는 스타일을 정의합니다.
  • 선택자와 함께 속성과 해당 속성에 대한 값을 선언하는 것으로 이루어집니다.
  • 예를 들어, 다음과 같은 선언부는 p태그 요소의 글꼴 크기를 16px로 지정합니다.
p { font-size: 16px; }

선택자(Selector)

  • 특정 HTML 요소를 식별하고 선택하기 위해 사용되는 패턴이나 규칙입니다. 태그 이름, 클래스, ID, 속성 등을 기반으로 요소를 선택할 수 있습니다.
  • 정적 크롤링 수행 시 원하는 요소에 접근하기 위해 선택자를 사용합니다.

속성(Properties)

  • 스타일을 정의하기 위해 사용되는 특정 스타일 속성입니다. color, font-size, background-color 등이 있습니다.

값(Values)

  • 특정 스타일 속성들에 할당되는 값을 말합니다. color 속성에 red, #000000, rgb(255, 0, 0)와 같은 값을 할당하여 색상을 정의할 수 있습니다.

클래스(Class)와 ID

  • 선택자(Selector)에서 많이 사용되는 것이 클래스(Class)와 ID입니다. 클래스는 .클래스명으로 선택되고, ID는 #ID명으로 선택됩니다.
  • 클래스는 여러 요소에 동일한 스타일을 적용하기 위해 사용되며, 동일한 클래스 이름을 가진 요소를 선택할 수 있습니다. ID는 고유한 식별자로 하나의 요소에만 적용됩니다.

상속(Inheritance)

  • CSS에서는 부모 요소로부터 상속되는 스타일 속성이 있습니다. 따라서 부모 요소에 스타일을 적용하면 자식 요소에도 일부 스타일이 상속될 수 있습니다.

우선순위(Cascade)

  • 동일한 요소에 대해 여러 스타일이 적용되는 경우, CSS는 우선순위 규칙을 적용하여 어떤 스타일이 적용될지 결정합니다. 일반적으로 명시도(Specificity), 충돌(Collision) 및 소스 순서(Source Order)에 의해 우선순위가 결정됩니다.

박스 모델(Box Model)

  • 요소가 렌더링될 때, 요소의 내용(content), 안쪽 여백(padding), 테두리(border), 외부 여백(margin)으로 구성된 박스로 간주됩니다. 각각의 영역은 스타일을 통해 크기, 여백 등을 조정할 수 있습니다.

3.1.3 Xpath란?

  • XML 문서에서 요소를 선택하고 탐색하기 위한 언어인 XPath는 트리 구조로 구성된 문서의 경로를 사용하여 요소, 속성, 텍스트 등을 식별합니다. (XML: Extensible Markup Language)
  • Xpath를 활용하여 HTML 문서의 특정 요소에 대한 경로를 지정할 수도 있어 Python 동적 크롤링 라이브러리 Selenium에서 사용되기도 합니다.
 

아래 코드는 전체 html 예시 중 한 section만을 잘라서 가져온 것입니다. Xpath 예시는 이 코드를 통해 살펴보겠습니다.

  • XPath는 부모-자식, 형제, 조상-자손 등의 노드 관계를 사용하여 경로를 지정할 수 있습니다.
  • 예를 들어, //book 경로는 문서의 모든 book 요소를 선택합니다.
<section> <h2>Bookstore</h2> <bookstore> <book category="fiction"> <p> <booktitle lang="en">Harry Potter</booktitle> <author>J.K. Rowling</author> <price>10.99</price> </p> </book> <book category="fiction"> <p> <booktitle lang="en">The Hobbit</booktitle> <author>J.R.R. Tolkien</author> <price>12.99</price> </p> </book> <book category="non-fiction"> <p> <booktitle lang="en">The Art of War</booktitle> <author>Sun Tzu</author> <price>8.99</price> </p> </book> </bookstore> </section>
 
 

경로 표현식(Path Expression)

  • XPath는 경로 표현식을 사용하여 XML 문서의 요소나 노드를 찾습니다. 경로 표현식은 문서 구조를 따라 이동하며, 요소, 속성, 텍스트 등을 선택하는 데 사용됩니다.

노드 관계

  • XPath는 부모-자식, 형제, 조상-자손 등의 노드 관계를 사용하여 경로를 지정할 수 있습니다.
  • 예를 들어, //book 경로는 문서의 모든 경로에 있는 book 요소를 선택합니다.

요소(Element) 선택

  • XPath를 사용하여 XML 문서에서 특정 요소를 선택할 수 있습니다.
  • 예를 들어, //bookstore/book 경로는 bookstore 요소의 모든 book 요소를 선택합니다.
notion image

조건(Condition) 필터링

  • 조건을 사용하여 특정 요소를 필터링 할 수 있습니다.
  • 예를 들어, //bookstore/book[price>10] 경로는 bookstore 요소의 모든 book 요소 중 가격이 10보다 큰 요소를 선택합니다.
notion image

속성(Attribute) 선택

  • XPath는 XML 요소의 특정 속성을 선택할 수도 있습니다.
    • 예를 들어, //bookstore/book/@category 경로는 bookstore 요소의 모든 book 요소의 category 속성을 뜻합니다. 여기에서 //booksotre/book/[@category='fiction']와 같이 조건 필터링을 사용해 category 속성 중 원하는 것을 선택할 수 있습니다.
      • notion image
 
방금 배운 것을 활용해서 bookstore 안의 원하는 값을 추출해봅시다.

모든 책의 제목 선택하기

  • XPath 표현식 //booktitle은 문서의 모든 booktitle 요소를 선택합니다.
  • 즉, "Harry Potter", "The Hobbit", "The Art of War"의 제목을 선택합니다.
notion image

특정 카테고리에 속하는 책 선택하기

  • XPath 표현식 //book[@category="fiction"]/p/booktitle은 카테고리가 'fiction'인 모든 booktitle 요소를 선택합니다.
  • 즉, 두 개의 book 요소인 "Harry Potter"와 "The Hobbit"을 선택합니다.
notion image

가격이 10보다 작은 책의 제목 선택하기

  • XPath 표현식 //bookstore/book/p[price<10]/booktitle은 가격이 10보다 작은 모든 book 요소의 booktitle 요소를 선택합니다.
  • 즉, “The Art of War"를 선택합니다.
notion image

특정 언어로 작성된 모든 책의 저자 선택하기

  • XPath 표현식 //bookstore/book/p/booktitle[@lang="en"]/../author는 언어가 'en'인 모든 book 요소의 author 요소를 선택합니다. 여기서 ‘..’은 현재 노드의 부모 노드를 선택한다는 의미입니다.
  • 즉, "Harry Potter", "The Hobbit", “The Art of War”의 저자인 ‘J.K. Rowling’, ‘J.R.R. Tolkien’, ‘Sun Tzu’를 선택합니다.
notion image

첫 번째 책의 가격 선택하기

  • XPath 표현식 //bookstore/book[1]/p/price는 첫 번째 book 요소의 price 요소를 선택합니다.
  • 즉, 10.99를 선택합니다.
notion image

3.1.4 웹에서 Element, CSS Selector, Xpath 가져오는 방법

 

3.2 정적 웹 크롤링(bs4, Requests)

웹 크롤링은 웹 상에 있는 데이터를 수집하는 행위를 말합니다. 그리고 웹 상에서 수집하는 데이터의 종류에 따라 정적 웹 크롤링과 동적 웹 크롤링으로 구분됩니다.
 
먼저, 정적 웹 크롤링은 웹 상의 정적인 데이터를 수집하는 것입니다.
  • 접속했을 때 로딩된 데이터만을 대상으로 데이터 수집을 수행하는 웹 크롤링입니다.
  • URL 값을 변경해가며 여러 웹페이지를 크롤링 할 때 사용합니다.
[Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리
안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다. 업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다. [웹 크롤링 기초] 2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초 2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법 2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이..
[Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리
https://coding-kindergarten.tistory.com/27
[Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리
 
Python에서 정적 웹 크롤링을 하기 위해서는 2가지 라이브러리를 알아야 합니다.

3.2.1 requests 라이브러리

  • requests 라이브러리는 HTTP 요청을 도와주는 대표적인 라이브러리로 웹 상의 데이터를 받아올 수 있습니다.
  • 먼저, requests 라이브러리를 설치해보겠습니다.
# Jupyter에서 실행 !pip install requests
  • 아래 코드를 실행시키면 해당 URL 웹 서버에 HTTP 요청을 보내고 그에 따른 응답을 받아옵니다.
github 경우해서 html 사용 가능한지.ipynb
1.8KB
import requests # 데이터 수집을 수행할 사이트의 url을 입력합니다. url = 'https://spanish96.github.io/Crawling_DAS/' # 해당 url로부터 데이터를 받아옵니다. response = requests.get(url) # 받아온 데이터로부터 html 데이터를 추출합니다. html_text = response.text print(html_text)
# 결과 <!DOCTYPE html> <html> <head> <title>멋쟁이 사자처럼 데이터분석스쿨 1기</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } h1 { color: #333; } p { color: #666; } .highlight { background-color: skyblue; } </style> </head> <body> <header> <h1>환영합니다!</h1> </header> ...중략... (3.1의 HTML 예제와 동일합니다.) <footer> <p>&copy; 2023 멋쟁이 사자처럼 데이터분석스쿨 1기. All rights reserved.</p> </footer> </body> </html>
 
  • reference
Requests: HTTP for Humans™ — Requests 2.31.0 documentation
Requests: HTTP for Humans™ — Requests 2.31.0 documentation
https://requests.readthedocs.io/en/latest/
 

3.2.2 beautifulsoup4 라이브러리

  • beautifulsoup4 라이브러리는 HTTP 요청을 통해 받아온 데이터에서 수집하고자 하는 데이터만 추출할 수 있도록 도와주는 파싱 라이브러리 입니다.
  • 먼저, 라이브러리를 설치해보겠습니다.
# Jupyter에서 실행 !pip install beautifulsoup4
  • BeautifulSoup은 클래스로 beautifulsoup4(bs4) 라이브러리 안에 있습니다.
# 일반적으로 as를 사용하여 이름을 bs로 재정의합니다. from bs4 import BeautifulSoup as bs # HTTP 요청을 통해 받아온 데이터를 html.parser를 이용하여 파싱해줍니다. # 이 작업을 통해 원하는 데이터에 selector를 통해 접근할 수 있게 됩니다. soup = bs(html_text, 'html.parser')
 
BeautifulSoup 클래스에는 필요한 데이터를 쉽게 찾을 수 있도록 도와주는 다양한 메소드들이 존재합니다. 많이 사용하는 메소드 위주로 살펴보겠습니다.
requests, bs4 예시 확인용.ipynb
9.3KB

find()

  • 태그, 클래스, id, 속성 등을 통해 조건에 해당되는 데이터 하나를 추출하는 메소드입니다.
soup.find('title') # 결과 <title>멋쟁이 사자처럼 데이터분석스쿨 1기</title>

find_all()

  • 태그, 클래스, id, 속성 등을 통해 조건에 해당되는 모든 데이터를 추출하는 메소드입니다.
soup.find_all('price') # 결과 [<price>10.99</price>, <price>12.99</price>, <price>8.99</price>]

select_one()

  • CSS selector를 사용하여 조건에 해당되는 데이터 하나를 추출하는 메소드입니다.
soup.select_one('body > main > section > h2') # 결과 <h2>소개</h2>

select()

  • CSS selector를 사용하여 조건에 해당되는 모든 데이터를 추출하는 메소드입니다.
soup.select('body > main > section > h2') # 결과 [<h2>소개</h2>, <h2>Bookstore</h2>, <h2>서비스</h2>]
 
  • reference
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
https://beautiful-soup-4.readthedocs.io/en/latest/
 

3.3 동적 웹 크롤링(Selenium)

  • 동적 웹 크롤링은 웹 상의 동적인 데이터를 수집하는 것입니다. 정적 웹 크롤링과 비교하여 생각하면 이해하기 쉽습니다.
  • 정적 웹 크롤링은 클릭이나 스크롤 등 추가적인 동작을 해야 확인할 수 있는 데이터를 크롤링하지 못합니다. 이 때 필요한 것이 동적 웹 크롤링입니다.
  • 같은 웹 페이지 상에서 검색 조건이나 값을 바꾸거나 버튼을 클릭하면 팝업창이 나타나는 등 웹 상에 변화가 생깁니다. 하지만 URL에는 변화가 없는 경우가 있습니다. 이런 경우에 동적 웹 크롤링을 사용합니다.
 
python에서 동적 웹 크롤링을 하기 위해서는 Selenium 라이브러리를 알아야 합니다.
  • Selenium 라이브러리는 웹 드라이버를 사용하여 웹 페이지를 조작할 수 있도록 해주는 라이브러리입니다.
  • 먼저, Selenium 라이브러리를 설치해보겠습니다.
# Jupyter에서 실행 !pip install selenium # ==3.14.1 (구버전)
  • 이 라이브러리를 사용하면 동일한 URL에서 변동되는 웹 상의 데이터들을 수집할 수 있습니다.
from selenium import webdriver # 데이터 수집을 수행할 사이트의 url을 입력합니다. url = 'https://spanish96.github.io/Crawling_DAS/' # webdriver를 사용하여 chrome을 실행합니다. driver = webdriver.Chrome() # 해당 url로부터 데이터를 받아옵니다. driver.get(url) print(driver.current_url) print(driver.title)
# 결과 https://spanish96.github.io/Crawling_DAS/ # current_url 멋쟁이 사자처럼 데이터분석스쿨 1기 # title
 

By 클래스

  • Selenium 라이브러리를 사용하여 요소에 접근할 때에는 find_element() 메소드를 사용합니다.
  • 그리고 이 메소드는 By 클래스를 함께 사용합니다.
from selenium.webdriver.common.by import By ''' class By: ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector" '''
  • 원하는 요소를 찾는 여러 방법들 중 많이 사용되는 By.XPATH 예제를 살펴보겠습니다.
driver.find_element(By.XPATH, '//h2') # 결과 소개
driver.find_elements(By.XPATH, '//h2') # 결과 소개 Bookstore 서비스
 

Action Chains

  • .click, .scrolling, 페이지 넘기기
  • .click → url 변동되는…
 
  • reference
Selenium with Python — Selenium Python Bindings 2 documentation
Selenium with Python — Selenium Python Bindings 2 documentation
https://selenium-python.readthedocs.io/index.html
selenium 모듈 참고사이트2

3.4 웹 크롤링 주의사항

3.4.1 웹 크롤링의 필요성과 웹 크롤링의 보안·윤리적 문제

  • 다양하고 많은 정보들을 모을 수 있다는 것이 웹 크롤링의 장점 중 하나입니다.
  • 하지만 웹 상의 데이터 또한 기업이나 개인의 자산이기 때문에 아무 자료나 마음대로 크롤링해서는 안됩니다.
  • 위와 같은 이유로 크롤링을 허용하지 않는 사이트들도 존재합니다. 따라서 크롤링을 시작하기 전에 크롤링 가능 여부를 반드시 확인해서 법적 문제에 걸리지 않도록 조심해야 합니다.
 

3.4.2 웹 크롤링 가능 여부 파악 방법

  • 웹 크롤링 가능 여부는 각 사이트의 robots.txt를 통해 확인할 수 있습니다. 이 텍스트 파일은 해당 사이트에 대한 웹 크롤링 국제 권고안입니다.
  • 크롤링을 하고자 하는 사이트 URL 뒤에 /robots.txt를 붙이면 웹 상에 정보가 뜨거나, robots.txt 파일이 다운되어 내용을 확인할 수 있습니다.
notion image
 
  • robots.txt 에는 User-agent 와 Disallow, Allow 키워드가 있습니다.
  • 각 User-agent에 따라 Disallow/Allow된 경로를 보고, 크롤링 가능 여부를 확인합니다.
 
몇 가지 예시를 살펴보겠습니다.
  • 네이버의 경우, 모든 User에 대해서 최상위 페이지( /, root)로부터 하위의 모든 문서 크롤링을 허용하지 않고 있습니다. 하지만 최상위 페이지에 대해서는 크롤링을 허용하고 있습니다.
# https://www.naver.com/robots.txt (파일) User-agent: * Disallow: / Allow : /$
  • 유튜브의 경우, 이름이 ‘Mediapartners-Google’로 시작하는 크롤링봇에 대해서는 모든 접근을 허용하고 있습니다. 하지만 다른 모든 User에 대해서는 아래에 명시된 페이지(문서)에 대한 크롤링을 허용하고 있지 않습니다.
# https://www.youtube.com/robots.txt User-agent: Mediapartners-Google* Disallow: User-agent: * Disallow: /comment Disallow: /feeds/videos.xml Disallow: /get_video Disallow: /get_video_info Disallow: /get_midroll_info Disallow: /live_chat Disallow: /login Disallow: /results Disallow: /signup Disallow: /t/terms Disallow: /timedtext_video Disallow: /verify_age Disallow: /watch_ajax Disallow: /watch_fragments_ajax Disallow: /watch_popup Disallow: /watch_queue_ajax Sitemap: https://www.youtube.com/sitemaps/sitemap.xml Sitemap: https://www.youtube.com/product/sitemap.xml
  • URL의 마지막에 robots.txt를 붙였을 때 확인이 되지 않을 때도 있습니다. 이러한 경우에는 문제가 발생할 수도 있는 상황을 고려하여 크롤링을 하지 않는 것을 권장합니다.
 
  • reference
[robots.txt] 기본설정값 snippet
1. Robots.txt란 무엇인가? ▶ robots.txt는 검색로봇에게 사이트 및 웹페이지를 수집할 수 있도록 허용하거나 제한하는 국제 권고안입니다. ▶ robots.txt 파일은 항상 사이트의 루트 디렉토리에 위치해야 하며 로봇 배제 표준을 따르는 일반 텍스트 파일로 작성해야 합니다. 1-1. Robots.txt 위치 ▶ robots.txt 파일은 반드시 사이트의 루트 디렉토리에 위치해야 하며 텍스트 파일 (text/plain) 로 접근이 가능해야 합니다. 예를 들어) https://www.example.com/robots.txt 2. 사용 예시들 User-agent: * Allow: / ▶ 모든 로봇에게 모든 문서에 대한 접근을 허락합니다. User-agent: * Disallow: / ▶ 모든 ..
[robots.txt] 기본설정값 snippet
https://query.tistory.com/entry/robotstxt-기본설정값-snippet
[robots.txt] 기본설정값 snippet
10분 안에 끝내는 robots.txt 총정리 가이드
robots.txt가 무엇인지 잘 모르시나요? 작성 방법부터, 상황별 예시까지 robots.txt에 대한 모든 것을 10분 안에 알아보세요.
https://seo.tbwakorea.com/blog/robots-txt-complete-guide/
10분 안에 끝내는 robots.txt 총정리 가이드
웹 크롤링을 하기 전에 알아야 할 것 들
웹 크롤링 (Web Crawling) - 조직적, 자동화 된 방법으로 웹을 탐색하고 수집하는 행위 또는 프로그램 ex) 구글, 네이버 등의 검색엔진 결과 데이터를 수집하는 봇(bot) 스크래핑 (Scraping) - 웹 사이트의 내용을 긁어다 원하는 형태로 가공하는 것 : 웹 사이트의 정보를 추출하는 행위 또는 프로그램 ex) 상품별 가격을 알기위해 해당 상품과 관련된 페이지들의 가격을 추출하는 행위 ※ 대부분의 사람들이 크롤링과 스크래핑을 같은 의미로 사용 웹 크롤링 허용 여부 확인 방법 - 사이트의 주소 맨 뒤에 /robots.txt 를 입력하고 접속 ㆍrobots.txt : 검색로봇에게 사이트 및 웹 페이지를 수집할 수 있도록 허용하거나 제한하는 국제 권고안 : 사이트의 루트 디렉터리에 위치하며 로..
웹 크롤링을 하기 전에 알아야 할 것 들
https://2mukee.tistory.com/129
웹 크롤링을 하기 전에 알아야 할 것 들
1강 extend : 아무거나 막 크롤링 해도 될까?
웹크롤링 이란 웹사이트에서 데이터를 긁어와 저장하는 기법을 의미합니다 ! 크롤링을 이용한 서비스가 굉...
1강 extend : 아무거나 막 크롤링 해도 될까?
https://blog.naver.com/PostView.naver?blogId=chagok-chagok&logNo=222319517167
1강 extend : 아무거나 막 크롤링 해도 될까?
 
 

reference (공식문서)

 
라이브러리 참고 문서
  • Requests 라이브러리
Requests: HTTP for Humans™ — Requests 2.31.0 documentation
Requests: HTTP for Humans™ — Requests 2.31.0 documentation
https://requests.readthedocs.io/en/latest/
  • beautifulsoup4 라이브러리
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
https://beautiful-soup-4.readthedocs.io/en/latest/
  • Selenium 라이브러리
Selenium with Python — Selenium Python Bindings 2 documentation
Selenium with Python — Selenium Python Bindings 2 documentation
https://selenium-python.readthedocs.io/index.html
 
notion image
notion image