ㅁ 프로젝트 산출물 : https://busanportservice.streamlit.app/
ㅁ선용품 관련 품목선정 중 식품카테고리에 대한 워드 크라우드 활용 데이터 크롤링
○ 셀레니움 → 크롤링 활용
○ 뷰티풀숲 → 크롤링 활용
○ re → 전처리 활용
○ pandas → 전처리 활용
from selenium import webdriver #Selenium의 웹 드라이버를 사용하기 위한 모듈을 임포트
from selenium.webdriver.common.by import By #Selenium에서 사용하는 By 클래스를 임포트합. 웹 요소를 검색하는데 사용.
from selenium.webdriver.common.keys import Keys #키보드 입력 제어를 위해 Keys 클래스 임포트
from selenium.webdriver.chrome.service import Service #Chrome 드라이버 서비스를 사용하기 위한 모듈 임포트
from selenium.webdriver.chrome.options import Options #Chrome 드라이버 옵션을 설정하기 위한 클래스 임포트
from webdriver_manager.chrome import ChromeDriverManager #Chrome 드라이버를 자동으로 설치 및 관리하는데 사용되는 드라이버 매니저 임포트
from bs4 import BeautifulSoup #Beautiful soup 크롤링을위해
import pandas as pd
import time
myOption = Options() #옵션객체 변수지정
myOption.add_argument("--start-maximized") #크롬 드라이버 창 최대화
myOption.add_argument("--incognito") #크롬 드라이버 시크릿모드로 진행
myOption.add_experimental_option("excludeSwitches", ["enable-automation"]) #드라이버 시작시 불필요문구 미표시되도록 설정
myOption.add_experimental_option("excludeSwitches", ["enable-logging"]) #터미널상의 불필요문구 미표시되도록 설정
myOption.add_experimental_option("detach", True) #드라이버 자동꺼짐 방지
#드라이버 세팅
myService = Service(ChromeDriverManager().install()) #크롬드라이버 설치
myDriver = webdriver.Chrome(service=myService, options=myOption) #드라이버 서비스 및 옵션 지정
targetUrl = "https://www.tasteatlas.com/best-rated-meat-dishes-in-korea"
myDriver.get(targetUrl)
#추출한 데이터를 저장할 리스트
useTitle = list()
useContent = list()
#소제목 추출 / find_elements를 활용하여 반환된 리스트를 반복문으로 요소추출 후 다른 리스트에 저장
txtTitle = myDriver.find_elements(By.CLASS_NAME, value="h1.h1--bold")
for i in txtTitle:
useTitle.append(i.text)
#소제목별 내용 추출 / find_elements를 활용하여 반환된 리스트를 반복문으로 요소추출 후 다른 리스트에 저장
txtContent = myDriver.find_elements(By.CLASS_NAME, value="read-more--hidden.ng-scope")
for v in txtContent:
useContent.append(v.text)
#저장된 데이터 길이 확인
print(len(useTitle)) # 22
print(len(useContent)) #10 : 사이트를 보면 10위까지만 텍스트가있음
myDriver.quit()
print("드라이버 종료")
#사이트 데이터 생성을 위한 전처리
hrefUseTitle = useTitle
hrefUseTitle[0] = "chikin"
hrefUseTitle[4] = "dak-galbi"
hrefUseTitle[11] = "andong-jjimdak"
hrefUseTitle[12] = "Jeyuk-bokkeum"
hrefUseTitle[17] = "dwaeji-galbi"
hrefUseTitle = hrefUseTitle[:-1] #view more 제거를 위해 코딩
hrefUseTitle
#위 키워드를 바탕으로 사이트별 기사내용추출
anotherPages = list()
for s in range(len(hrefUseTitle)):
another = f"https://www.tasteatlas.com/{hrefUseTitle[s]}"
anotherPages.append(another)
print(anotherPages)
print(len(anotherPages))
#데이터 저장 리스트 생성
coreContentList = list()
#드라이버 세팅
for f in range(len(anotherPages)):
#옵션
myOption = Options() #옵션객체 변수지정
myOption.add_argument("--start-maximized") #크롬 드라이버 창 최대화
myOption.add_argument("--incognito") #크롬 드라이버 시크릿모드로 진행
myOption.add_experimental_option("excludeSwitches", ["enable-automation"]) #드라이버 시작시 불필요문구 미표시되도록 설정
myOption.add_experimental_option("excludeSwitches", ["enable-logging"]) #터미널상의 불필요문구 미표시되도록 설정
myOption.add_experimental_option("detach", True) #드라이버 자동꺼짐 방지
#드라이버실행
myDriver = webdriver.Chrome(service=myService, options=myOption) #드라이버 서비스 및 옵션 지정
print(f"{f} 차\t 시작")
myDriver.get(anotherPages[f])
time.sleep(2)
#기사 추출 / find_elements를 활용하여 반환된 리스트를 반복문으로 요소추출 후 다른 리스트에 저장
coreContent = myDriver.find_elements(By.CLASS_NAME, value="card__main")
for i in coreContent:
corestory = i.text
coreContentList.append(corestory)
time.sleep(2)
myDriver.quit()
print(f"{f} 차\t 종료")
final_data = pd.DataFrame({
"제목" : hrefUseTitle,
"내용" : coreContentList,
"주소" : anotherPages
})
final_data.to_csv("failWebCsv.csv", encoding="utf-8-sig")
'Portfolio & Toy-Project' 카테고리의 다른 글
타이타닉 생존자 예측 Machine Learning 구현 (0) | 2024.04.06 |
---|---|
프로젝트 : 부산항만공사 서비스 제안관련 데이터분석-4 (0) | 2024.03.11 |
프로젝트 : 부산항만공사 서비스 제안관련 데이터분석-2 (0) | 2024.03.11 |
프로젝트 : 부산항만공사 서비스 제안관련 데이터분석-1 (0) | 2024.03.11 |
판다스 : .melt() 함수1 (0) | 2024.02.07 |