본문 바로가기
Python/Python_Crawling

크롤링 예제 1

by Mr.DonyStark 2023. 12. 19.

□ 사용 라이브러리

  ○ requests : 웹페이지 가져오기 라이브러리
  ○ bs4(BeautifulSoup) : 웹페이지 분석(크롤링) 라이브러리

#라이브러리 임포트
import requests
from bs4 import BeautifulSoup

#웹페이지 가져오기 requests.get()
bring_web = requests.get('https://sports.news.naver.com/news?oid=477&aid=0000464871')

#웹페이지 파싱하기
#.content, 'html.parser' html 관련 태그를 파싱해주는 함수)
parsing =  BeautifulSoup(bring_web.content,'html.parser')
print(parsing)

#필요 데이터 추출
mydata_title = parsing.find('title')
mydata_h3 = parsing.find('h3')

#추출 데이터 활용 .get_text()
print(f'title 태그 파싱 데이터\t:\t{mydata_title.get_text()}')
print(f'text 태그 파싱 데이터\t:\t{mydata_h3.get_text()}')


파싱(parsing) : 문자열의 의미를 분석하기위한 행위 / html은 string 형태임
태그별 css 속성등으로 데이터 추출
  ○ 변수명 = 변수명.find('태그', class_ ='스타일')
  ○ 변수명 = 변수명.find('태그', '스타일')
  ○ 변수명 = 변수명.find('태그', attrs = {'align':'center'})
  ○ 변수명 = 변수명.find(id='아이디명')

# 라이브러리 호출
from bs4 import BeautifulSoup

html_data = """
<html> 
    <body> 
        <h1 id='title'>[1]크롤링이란?</h1> 
        <p class='cssstyle'>웹페이지에서 필요한 데이터를 추출하는 것</p> 
        <p id='body' align='center'>파이썬을 중심으로 다양한 웹크롤링 기술 발달</p> 
    </body> 
</html>
"""

# html 태그 파싱 함수 호출
parser_data = BeautifulSoup(html_data, "html.parser")

# 파싱 함수를 활용한 태그 데이터 추출
body_data = parser_data.find('body')
h1_data = parser_data.find('h1')
p_data = parser_data.find('p')

#속성값을 활용하여 호출
p_data_attr1 = parser_data.find('p', class_='cssstyle') #클래스명 지정으로 호출
p_data_attr2 = parser_data.find('p', attrs = {'class' : 'cssstyle'}) #속성값 지정으로 호출
p_data_attr3 = parser_data.find('p', attrs={'id':'body'}) #id를 지정하여 호출
p_data_attr4 = parser_data.find('p', attrs={'align':'center'}) #id를 지정하여 호출

# 태그별 텍스트 추출 .get_text()
print(f'body_data get_text()\t:\t{body_data.get_text()}' )
print(f'h1_data get_text()\t:\t{h1_data.get_text()}')
print(f'p_data get_text()\t :\t{p_data.get_text()}')
print(f'body_data string\t:\t{body_data.string}' )  #body를 제외한 나머지는 출력됨
print(f'h1_data string\t:\t{h1_data.string}')
print(f'p_data string\t:\t{p_data.string}')
print(f'p_data_attr1 값\t:\t{p_data_attr1.string}')
print(f'p_data_attr2 값\t:\t{p_data_attr2.string}')
print(f'p_data_attr3 값\t:\t{p_data_attr3.string}')
print(f'p_data_attr4 값\t:\t{p_data_attr4.string}')

#조건에 해당하는 태그내의 모든 값을 가져오는 것으로 get_text()와 for문을 활용하여 출력
#find_all을 사용하면 데이터를 리스트형태로 데이터를 추출 저장함 때문에 for문을 사용함
p_data_all = parser_data.find_all('p')
a = 0
for i in p_data_all:
    a += 1
    print(f'p태그안의 {a} 값\t:\t{i.get_text()}')