[04] HTML_CSS_selector

고근호·2023년 9월 5일

HTML

  • 웹페이지의 레이아웃 및 텍스트 데이터를 출력하는 언어
  • 엘리먼트 > 태그 > 텍스트 : 계층적구조
<div> python </div>
  • 시작 태그 안에는 속성값이 들어있음 : id, class, attribute
  • id, class : 엘리먼트를 선택하기 위한 용도로 사용되는 속성값.
    • id : 한 페이지 내에서 유일하게 사용.
    • class : 여러개의 값을 가질 수 있음.
  • attribute : 정보를 저장하기 위한 속성값

Tag 종류(크롤링 사용 위주)

  • div : 레이아웃
  • p, span : 문자열
  • ul, li : 목록
  • a : 링크 : href
  • img : 이미지 : src

CSS selector

  • 엘리먼트를 선택하기 위한 문법
- <div id='d1' class='data no1'>data1</div>
- <p id='d2' class='data no2'>data2</p>
  • tag : div : data1 선택
  • tag : p : data2 엘리먼트 선택
  • id : #d1 : data1 엘리먼트 선택
  • class : .data : data1, data2 엘리먼트 선택
  • class : .no1, .no2 : data1, data2 엘리먼트 선택
  • attribute : [value='1'] : data1 엘리먼트 선택

n번째 엘리먼트 선택 : nth-child()

<div>
    <p class='d'>data1</p>
    <p class='d'>data2</p>
    <span class='d'>data3</span>
    <p class=''> <p>data4</p> </div>
</div>
.d:nth-child(2) : 아무것도 선택 안됌
.d:nth-child(3) : data3 엘리먼트 선택

계층적 선택

  • div > p > data1, data2 엘리먼트 선택 : > : 한 단계 아래의 엘리먼트 중에서
  • div p : data1, data2, data3 엘리먼트 선택 : ' ' : 모든 하위 엘리먼트 중에서

네이버 연관 검색어 데이터 수집

  • 정적페이지 데이터 수집
import pandas as pd
import requests
from bs4 import BeautifulSoup

1. 웹페이지 분석 : 개발자 도구 : URL

- query = '삼성전자'
- url = f'https://search.naver.com/search.naver?query={query}'
- url

2. Request(URL) > Response(Data) : Data(html)

- response = requests.get(url)
- response
- <Response [200]>

3. html(str) > bs-object > .select(css-selector), .select_one(css-selector) > text

- dom = BeautifulSoup(response.text, 'html.parser')
- type(dom)
- bs4.BeautifulSoup
selector = '#nx_right_related_keywords >
div > div.related_srch > ul > li'
elements = dom.select(selector)
len(elements)
# 10
element = elements[0]
keyword = element.select_one('.tit').txt
keyword
# '삼성전자주가'
keywords = [element.select_one('.tit').text for element in elements]
keywords
pd.DataFrame({'keyword': keywords})

함수만들기

def rkeyword(query):
	# 1. url
    url = f'https://search.naver.com/search.naver?query={query}'
    # 2. request > response : html
    response = requests.get(url)
    # 3. html > bs object
    dom = BeautifulSoup(response.text, 'html.parser')
    # 4. bs object > elements
    selector = '
    elements = dom.select(selector)
    # 5. elements > keywords
    return [element.select_one('.tit').text for element in elements
rkeyword
profile
rootgo 매일, 꾸준히 성장하는 사람🌱

0개의 댓글