6/26 Today I Learned -1

boks·2024년 6월 26일
post-thumbnail

📖 학습한 내용

  • Web Crawling
  • XML

📖 핵심내용

📌 Web Crawling

  • 웹상의 정보들을 탐색하고 수집(인덱싱)하는 작업
  • 웹 크롤러 (Crawler) 라고 불리는 자동화된 프로그램이 웹사이트를 순회하며 데이터 수집 링크를 따라가며 다양한 웹 페이지로 이동

URL 구조

  • 프로토콜://호스트:포트/패쓰?쿼리#프레그먼트
    • 프로토콜 (Protocol): 통신에 사용되는 프로토콜을 지정합니다. 예를 들어, http, https, ftp 등이 있습니다.
    • 호스트 (Host): 리소스를 호스팅하는 서버의 도메인 이름 또는 IP 주소입니다. 예를 들어, www.example.com 또는 192.168.1.1입니다.
    • 포트 (Port): 서버가 사용하는 포트 번호입니다. 기본적으로 웹 서버는 포트 80 (HTTP) 또는 포트 443 (HTTPS)을 사용합니다. 포트 번호가 명시되지 않으면 기본값이 사용됩니다.
    • 패쓰 (Path): 서버 내에서 특정 리소스의 경로를 지정합니다. 예를 들어, /docs/index.html입니다.
    • 쿼리 (Query): ? 뒤에 오는 부분으로, 서버에 보내는 추가 데이터를 포함합니다. 여러 개의 파라미터는 &로 구분됩니다. 예를 들어, ?id=123&search=test입니다.
    • 프레그먼트 (Fragment): # 뒤에 오는 부분으로, 문서 내의 특정 섹션을 가리킵니다. 예를 들어, #section2입니다.

웹스크래핑 process

  1. 필요한 것이 무엇인지, 어디서 얻을 수 있는지 결정
  2. 페이지의 소스 코드 다운로드
  3. 정보 추출
  • 정보가 포함된 태그 찾기
  • 정보 추출
  1. 정보 저장

웹 스크래핑 프로그램의 두가지 역할

소스코드 따위의 원본 데이터 다운 - 모듈 : requests / urllib
소스코드에서 정보추출과 저장 - 모듈 : BeautifulSoup

정보 추출 - BeautifulSoup

HTML 페이지를 중첩된 데이터 구조로 표현, 하고 페이지 파싱
페이지 파싱을 위해 'BeautifulSoup()' 생성자 사용, 해당 페이지를 BS 객체로 변경

r = requests.get (url)
html=r.text
soup=BeautifulSoup(html, ‘lxml’)

find(), find_all()

• 찾고자하는 tag의 조건 (이름, 그외 다른 속성 정보)을 인자로 입력
• find()는 해당 조건을 만족하는 첫번째 tag를 반환
• find_all()은 해당 조건을 만족하는 모든 tag들을 반환
• 리스트 데이터가 결과로 반환
• 찾고자 하는 tag를 indexing을 통해서 접근 가능

Tag의 속성 (attribute) 정보 이용하기

soup.find(tag_name, attrs={'attr_name':'value'})
• Tag의 이름 뿐만 아니라, 속성 정보를 이용해서 특정 tag를 서치 가능
• 속성 정보는 시작 tag에 저장

  • 원하는 정보가 시작태그와 종료태그 사이에 저장되어 있는 텍스트 정보가 아니라,
    특정 속성의 값인 경우 - get() 함수 이용

자식 태그에 접근하기 - contents

  • contents: head 태그의 모든 자식 원소를 리스트 형태로 반환합니다.

soup.head.contents

부모 태그에 접근하기 - parent

soup.title.parent

형제자매 태그에 접근하기 next_sibling

  • 그 다음 p 태그에 접근하기 위해서는 next_sibling 키워드를 다시 한번 적용
    soup.find('p',attrs={'class':'title'}).next_sibling.next_sibling

    -> 다른 p 태그의 속성이 출력된다.

태그 속성의 값 추출하기 - get() 함수 사용

<a class="BS_Korean" href="https://www.crummy.com/software/BeautifulSoup/bs4/doc.ko/"> BS4 for beginners (한글버전)</a>

속성명1 : class , 속성값1 : "BS_Korean",
속성명2 : href, 속성값2:
soup.a.get('href')

-> 속성값 href를 통해서 가져올 수 있다.

📌 XML

  • 데이터를 정의하는 규칙을 제공하는 마크업 언어
  • 웹 사이트, 데이터베이스 및 타사 애플리케이션과 같은 컴퓨터 시스템 간의 정보 교환 지원

📖 흥미로운 점 / 새로 알게된 점

  • 아래와 같이 입력하면 해당 조건을 만족하는 두 개의 p 태그가 모두 찾아지고, 그 결과가 리스트 형태로 반환
    soup.find_all('p', attrs={'class':'description'})

📖 이후 학습 계획

  • 법원 데이터 크롤링하기
profile
설계엔지니어의 변신

0개의 댓글