본문 바로가기
Python/Python_Crawling

크롤링 예제 2

by Mr.DonyStark 2023. 12. 19.

 .find, .find_all()

  ○ .find()

    - 조건만족 태그를 단 한개만 가져옴

    - 만약 조건을 만족하는 태그가 여러개라고하면 첫번째 것만 가져옴

  ○ .find_all()

    - 조건만족 태그관련 여러개의 값, 즉, 복수개를 모두 가져옴

 태그별 css 속성등을 활용한 조건으로 데이터 추출
  ○ 변수명 = 변수명.find('태그', class_ ='스타일')
  ○ 변수명 = 변수명.find('태그', '스타일')
  ○ 변수명 = 변수명.find('태그', attrs = {'align':'center'})
  ○ 변수명 = 변수명.find(id='아이디명')

.get_text(), .string

  ○ .get_text()

    -  문자열이 없을시 None 출력

  ○ .string

    -  유니코드 형식의 텍스트까지 문자열로 반환출력

*즉, 태그내의 텍스트 위치에 공백이라면 .get_text()는 None 출력, .String은 미표시되어 출력됨

import requests
from bs4 import BeautifulSoup

#크롤링할 사이트
target_area = requests.get('https://v.daum.net/v/20231218104636170')

#html.parser 실행
parsing_tools = BeautifulSoup(target_area.content, 'html.parser')

#title 추출
title_data = parsing_tools.find('title')
print(f'title 데이터\t:\t{title_data.string}')

#기본정보 class태그 추출
div_data = parsing_tools.find_all('div', attrs={'class':'info_view'})
for i in div_data:
    print(f'기사 기본정보\t:\t{i.get_text()}')

#기사 이메일
email_data = parsing_tools.find('p', attrs={'dmcf-pid':'0AVFp6lfy0'})
email_data_dummy = email_data.get_text().split()  #공백기준으로 분리하기위해 .split() 진행. 분리된 데이터들은 리스트 형태로 저장
email_data_list = email_data_dummy[2] #저장된 리스트 중 인덱스번호 2번째인 것 추출
print(f'기사 이메일\t:\t{email_data_list}')

#특정 p태그 데이터 추출
p_data = parsing_tools.find_all('p', attrs={'dmcf-ptype':'general'}) #p태그중 dmcf-ptype 속성값으로 general인것 추출
a = 0
new_content = list()
for v in p_data:
    a += 1
    print('★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★')
    print(f'{a} 번째 데이터\t:\t{v.get_text()}')
    print('★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★')
    new_content.append(v.get_text())
print(f'p 데이터(기사본문)\t:\t{new_content}')