Python

[Python] 크롤링 with selenium (id, class, 태그 명으로 찾기)

allempty_sheep 2024. 7. 31. 14:03
반응형

먼저 셀레니움을 설치 해 주자.

! pip install selenium

 

아래와 같은 코드들이 나오면서 설치가 완료 될 것이다.

 

아래 코드를 입력하여 에러가 나지 않으면 설치 및 불러오기가 완료 된 것이다.

from selenium import webdriver

 

드라이버를 선언하고 실행 해 보자. 홈페이지가 실행되면 잘 되는 것이다.

(최신 버전은 크롬 드라이버를 따로 받지 않아도 가능하다.)

driver = webdriver.Chrome();

 

💨 특정 홈페이지에 접속 해 보자.

url = 'https://www.naver.com/'
driver.get(url)                  # URL 에 해당하는 홈페이지 접속

html = driver.page_source        # html 정보 가져오기
print(html)                      #

driver.quit()                    # driver 종료

 

다음과 같이 html 코드를 가지고 왔다면 잘 된 것이다.

 

셀레니움으로 가져온 정보를 해석하기 위해 BeautifulSoup 라는 라이브러리를 사용 할 것이다.

그 전에 연습용 html을 하나 만들어 사용 해 보자.

html = '''
<html>
    <head>
    </head>
    <body>
        <h1>시장</h1>
        <div class='sale'>
            <p id='fruits1' class='fruits'>
                <span class='name'>사과</span>
                <span class='price'>3000원</span>
                <span class='inventory'>100개</span>
                <span class='store'>allempty 상회</span>
                <a href='https://allemptysheep.tistory.com/'>홈페이지</a>
            </p>
        </div>
        <div class='prepare'>
            <p id='fruits2' class='fruits'>
                <span class='name'>딸기</span>
            </p>
        </div>
    </body>
</html>
'''

💨 태그를 찾아보자.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

tags_span = soup.select('span')            # span 태그 찾기
print(tags_span)
tags_p = soup.select('p')                  # p 태그 찾기
print(tags_p)

💨 id, class, 태그명 + class 로도 찾을 수 있다.

ids_fruits1 = soup.select('#fruits1')              # id 로 태그 찾기
class_price = soup.select('.price')                # class 로 태그 찾기
tags_span_class_price = soup.select('span.price')  # 태그명, class 로 태그 찾기

print(ids_fruits1)
print(class_price)
print(tags_span_class_price)

 

그럼 과일 이름 '사과', '딸기' 의 이름 값을 가지고 있는 태그를 가지고 와보자.

tags_name = soup.select('span.name')
print(tags_name)

 

'사과' 의 태그만 가지고 오고 싶다면 태그 구조를 이용하여 가지고 올 수 있다.

tags_apple = soup.select('#fruits1 > span.name')  # id fruits1 안의 span 태그의 class name
print(tags_apple)

다음과 같이도 찾을 수 있다.

tags_apple2 = soup.select('div.sale > #fruits1 > span.name')
tags_apple3 = soup.select('div.sale span.name')

print(tags_apple2)

 

💨 태그 여러개를 찾아서 하나씩 출력 해 보자.

fruits = soup.select('span.name')

for fruit in fruits:
    print(fruit)

 

💨 태그의 텍스트, 속성을 가져와 보자.

tags = soup.select('a')
tag = tags[0]
print(tag)

content = tag.text
print(content)

link = tag['href']
print(link)