□ .replace : 기존 A를 B로 바꿈
□ .strip() : 앞뒤 공백 제거
□ 태그활용법
: ('태그명'), ('.클래스명'), ('태그명.클래스명'), ('부모태그.클래스명 > 자식태그.클래스명'), ('태그')['속성']
□ select + find_all(string=True) vs select + select_one
○ 아래 코드보면 알 수 있듯이 select + select_one 방법이 정확한 데이터를 추출하고 전처리하기에도 수월함
○ select+find_all 사용시 간편한 코드로 해당 영역의 텍스트를 신속하게 추출할 수 있지만 전처리하기에 불편함.
* 개인적으로 select + select_one 추천 / 특정영역의 정확한 태그값을 지정함으로써 효율적으로 수집, 가공이 가능하기에 추천
□ Select, Select_One 활용
#라이브러리 호출
import requests
from bs4 import BeautifulSoup
import datetime as dt
now_day = dt.datetime.now()
#크롤링 페이지
url_link = 'https://www.ssg.com/event/eventMain.ssg'
#request 설정
get_url_info = requests.get(url_link)
get_info = get_url_info.text
#parser 설정
my_parser = BeautifulSoup(get_info, 'html.parser')
#타겟영역의 데이터 추출 : li태그 class명(.evt_osmu_unit)
target_area = my_parser.select('li.evt_osmu_unit')
for index, v in enumerate(target_area):
index += 1
evt_title = v.select_one('strong').string.replace(' ',' ').strip() #행사명
evt_contents_1 = v.select_one('p.desc1').text.replace('\n',' ').strip() #행사내용1 : p태그의 클래스명 desc1
evt_contents_2 = v.select_one('p.desc2').text.replace('\n',' ').strip() #행사내용2 : p태그의 클래스명 desc2
evt_total_contents = evt_contents_1 + evt_contents_2 #행사내용1,2 합친 총 내용
if evt_total_contents == '': #행사 총 내용이 공란이라면 아래문구와 함께 저장
evt_total_contents = '특이내용 없음'
evt_link = v.select_one('a')['href'] #세부페이지 링크 : a태그의 href속성
if index > 43:
break
print(f'{now_day}\t{index} 번째 \t행사\n이벤트명\t:\t{evt_title}\n이벤트 내용\t:\t{evt_total_contents}\n이벤트링크\t:\t{evt_link}')
□ Select, Select_One 활용
#라이브러리 호출
import requests
from bs4 import BeautifulSoup
import datetime as dt
now_day = dt.datetime.now()
#크롤링 페이지
url_link = 'https://www.ssg.com/event/eventMain.ssg'
#request 설정
get_url_info = requests.get(url_link)
get_info = get_url_info.text
#parser 설정
my_parser = BeautifulSoup(get_info, 'html.parser')
#타겟영역의 데이터 추출 : li태그 class명(.evt_osmu_unit)
target_area = my_parser.select('li.evt_osmu_unit')
for v in target_area:
for index, v1 in enumerate(target_area):
text_area = v1.select_one('div.eo_in')
evt_content = text_area.find_all(string=True)
if index == 43:
break
for v2 in evt_content:
if v2 != '\n':
print(v2)
'Python > Python_Crawling' 카테고리의 다른 글
쿠팡 : 상품 검색결과 중 로켓배송인 상품 크롤링 (0) | 2024.02.13 |
---|---|
CGV 무비차트 크롤링 (1) | 2024.02.11 |
다음 뉴스(제목, 링크, 회사, 카테고리) 크롤링 (1) | 2024.02.05 |
.text 와 .string 차이점(보완) (0) | 2024.02.02 |
크롤링 : 멜론 (0) | 2024.02.02 |