CES 준비를 하는데 너무 리스트도 많고 힘이 들어서, 수상작 리스트 크롤링을 해봤다.
너무 오랜만에 하는지라 ^_^
1. 설치 및 import
#셀레니움,크롬드라이버 설치
!pip install selenium
!apt-get update # to update ubuntu to correctly run apt install
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
#wd.get("https://www.webite-url.com")
#필요한 패키지들 import
import requests
from selenium import webdriver
from bs4 import BeautifulSoup #bs4는 안쓰긴했음..
import pandas as pd
import time
import re
import csv
2. url 지정
webdriver를 wd로 가져왔으므로 wd.get('url')로 url 접속
# url 가져오기
wd.get('https://www.ces.tech/Innovation-Awards/Honorees.aspx')
3. 목표
i) 수상작 카테고리를 선택하고 제일 아래까지 스크롤한다
ii) 스크롤한 상태에서 회사명, 제품명, 제품상세 url을 가져온다
iii) 제품상세 url에 접속하여 제품 간략 설명 가져온다
4. 작업 코드
#코드 설명
## 데이터 리스트 만들어준다
data=[]
## 카테고리의 option이 [3]~[29]까지 유효해서 i구간을 이렇게 정했다
for i in range(3,30):
### 카테고리 클릭
wd.find_element_by_xpath('//*[@id="cat-sel"]').click()
### i번째 카테고리 클릭
wd.find_element_by_xpath(f'//*[@id="cat-sel"]/option[{i}]').click() #카테고리 클릭
### 로딩을 위해 5초 쉬고, 스크롤 좀 하고~ 5초 쉬고 스크롤 좀 하고
time.sleep(5)
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
time.sleep(5)
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
time.sleep(5)
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, window.scrollY + 100);")
wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
### 현재 데이터를 가져오는 카테고리명
cat_nm = wd.find_element_by_xpath(f'//*[@id="cat-sel"]/option[{i}]').text
### 가져온 회사명
comp_nm = wd.find_elements_by_class_name('company-name') #회사 이름을 가져옵니다
### 수집된 회사수 만큼의 list를 만들어준다
comp_nm_dt = [None]*len(comp_nm) # 회사이름 리스트
prod_nm_dt = [None]*len(comp_nm) # 상품명 리스트
url_dt = [None]*len(comp_nm) # url 리스트
cat_dt = [None]*len(comp_nm) # 카테고리명 리스트
for rk in range(0,len(comp_nm)): # 회사이름 수 만큼 반복하여 상품명 및 url수집해보자
comp_nm_dt[rk] = comp_nm[rk].text #회사이름을 순서대로 리스트에 할당
prod_nm = wd.find_element_by_xpath(f'//*[@id="ia-items"]/picture[{rk+1}]/footer/div[2]/a') #xpath를 활용해 상품명 획득
prod_nm_dt[rk] = prod_nm.text #상품명을 리스트에 할당
url = wd.find_element_by_xpath(f'//*[@id="ia-items"]/picture[{rk+1}]/footer/div[2]/a').get_attribute('href') #xpat를 활용해 href의 링크 정보 획득
url_dt[rk] = url #링크 정보를 리스트에 할당
cat_dt[rk] = cat_nm #카테고리명 할당 (어차피 1턴당 카테고리명은 같긴함)
data.append([cat_dt[rk],comp_nm_dt[rk],prod_nm_dt[rk],url_dt[rk]]) #데이터에 카테고리명, 회사명, 상품명, url 추가해줌
4-1. 1차 결과 확인
fin_data = pd.DataFrame(data,columns=['category','company_nm','product_nm','url'])
fin_data
4-2. 수집한 url에 접속하여 설명 정보 획득
desc_dt =[None]*len(fin_data) #fin_data길이로 리스트 만들어주고
for i in range(0,len(fin_data)):
wd.get(fin_data.url[i]) #순서대로 url 바꿔가며 접속
desc = wd.find_element_by_xpath('//*[@id="content"]/section/aside[2]/p[2]')
desc_dt[i] = desc.text # 수집한 데이터 할당
4-3. 1차 데이터 + url 설명 데이터 합치기
fin_data2 = fin_data
fin_data2['desc'] = desc_dt
4-4. 데이터 확인
5. csv 저장하기
fin_data2.to_csv('awards_list_f2.csv')
6. 결과 필요하신 분은 다운받아가세용 ㅎ_ㅎ !
'언어 > Python' 카테고리의 다른 글
[python] CES 뉴스 크롤링 /csv 파일명에 날짜 지정하기 (0) | 2021.01.08 |
---|---|
[Tensorflow] 텐서플로우 개발자 자격 시험 합격 후기 (20) | 2020.12.12 |
[Tensorflow] 자격시험 공부용 Colab 예제 링크 모음 (0) | 2020.11.28 |
[Python] 영화진흥위원회 상영관 데이터 웹크롤링 (0) | 2020.10.11 |