□ .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}')
'Python > Python_Crawling' 카테고리의 다른 글
css selector (0) | 2023.12.20 |
---|---|
크롤링 예제 3 (0) | 2023.12.19 |
크롤링 예제 1 (0) | 2023.12.19 |
셀레니움(Selenium) 기본예제 : naver 쇼핑 특정상품 위치 (0) | 2023.12.14 |
셀레니움(Selenium) 기본예제 : naver view 특정글 위치 (0) | 2023.12.13 |