Study/class note

코바코 웹스크롤링

chanzae 2022. 1. 21. 01:53

url 파싱

import urllib.request            # 파이썬에서 웹의 url 을 인식할 수 있게하는 모듈
from  bs4 import BeautifulSoup
from selenium import webdriver  # 크롬 웹브라우져를 자동으로 제어하기 위해 
from selenium.webdriver.common.keys import Keys  # 키보드를 컴퓨터가 알아서 누르기 위해서
import time                     # 중간중간 sleep 을 걸어야 해서 time 모듈 import
from tqdm import tqdm_notebook

########################### url 받아오기 ###########################

# 웹브라우져로 크롬을 사용할거라서 크롬 드라이버를 다운받아 위의 위치에 둔다
# 팬텀 js로 하면 백그라운드로 실행할 수 있음

binary = 'C:\\data\\chromedriver_win32\\chromedriver.exe'

# 브라우져를 인스턴스화
browser = webdriver.Chrome(binary)

# 광고자료실 url 받아옴
# for문으로 페이지 넘김
ad_url = []
for i in range(1,2):
    list_url = "https://www.kobaco.co.kr/site/main/archive/advertising/5?cp="+ str(i) +"&pageSize=8&sortDirection=DESC&arcUse=true&arcCategory=5&metaCode1=broadcast&adtDefaultYear=false"
    browser.get(list_url)

    time.sleep(3)                      # 네트워크 느릴까봐 안정성 위해 sleep 해줌
    html = browser.page_source         # 크롬브라우져에서 현재 불러온 소스 가져옴
    soup = BeautifulSoup(html, "lxml") # html 코드를 검색할 수 있도록 설정
    
    html_list = soup.select("div.bbs-gallery > ul > li > a")
    
    for h in html_list:
        ad_url.append(h.get("href"))

#  ad_url
# for ad in ad_url:
ad = "https://www.kobaco.co.kr/" + ad_url[0]

광고 개별url 접속 후 데이터 수집

import re
import openpyxl as xl
import pandas as pd


# dict = {}
# dict['0'] = []
# dict['1'] = []
# dict['2'] = []
# dict['3'] = []
aa = []
for i in ad_url:
    ad = "https://www.kobaco.co.kr" + i
    browser.get(ad)

    time.sleep(3)                      # 네트워크 느릴까봐 안정성 위해 sleep 해줌
    html2 = browser.page_source         # 크롬브라우져에서 현재 불러온 소스 가져옴
    soup2 = BeautifulSoup(html2, "lxml") # html 코드를 검색할 수 있도록 설정

# dict = {}
# dict['script'] = []
# dict['sujet'] = []
# dict['detail'] = []
# dict['title'] = []
# dict['year'] = []

# 광고 스크립트
# test = soup2.select("div.video-wrap > div > p ")
# for i in test:
#     a = re.sub('[\n|\r|\t]','',i.text)
#     dict['script'].append(a)
    
# 광고주제 대분류, 소분류, 제목, 제작연도
    test2 = soup2.find_all('td',class_='py-10 px-20 text-left')
    
    bb = []
    for t in test2[0:4]:
        bb.append(t.text)
    aa.append(bb)    
    
data = pd.DataFrame(aa)
data

 

 

+) 참고 블로그

https://coblin.xyz/22

 

openpyxl을 이용한 엑셀 데이터 추출하기

openpyxl 이란? openpyxl은 Excel 2010 xlsx/xlsm/xltx/xltm 파일을 읽고 쓰는 Python 라이브러리입니다. 설치방법 pip install openpyxl 사용방법 # 코드블럭에 삽입하다보니 인덴트가 안맞습니다. 참고해주세요!..

coblin.xyz

 

https://datalabbit.tistory.com/24

 

[데이터 크롤링] 파이썬 크롤링 데이터 엑셀로 저장하기 with Openpyxl 패키지

Review 참고 포스팅 : 2020/05/23 - [Python Programming/Using Packages] - [데이터크롤링] 데이터크롤링을 위해 HTML 이해하기 [데이터크롤링] 데이터크롤링을 위해 HTML 이해하기 안녕하십니까, 간토끼입니다...

datalabbit.tistory.com

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=kiddwannabe&logNo=221274278923&parentCategoryNo=&categoryNo=45&viewDate=&isShowPopularPosts=false&from=postView 

 

크롤링 결과 엑셀(csv)로 저장하기①

크롤링한 결과를 엑셀로 저장하는 방법에 대해서 살펴보겠습니다. 저장하는 방법에도 여러가지가 있을 수 ...

blog.naver.com

https://kbs4674.tistory.com/88

 

Ruby on Rails : 가상 브라우저를 활용한 크롤링 [Gem : selenium-webdriver]

해당 글은 https://blog.naver.com/kbs4674/221220959692 로 부터 게시글이 이전되었습니다. 크롤링 자료 연결고리 1. Nokogiri를 활용한 크롤링 [클릭] iframe/javascript 기반 사이트에 대해선 크롤링 지원이..

kbs4674.tistory.com

https://liveyourit.tistory.com/14

 

[파이썬] 동적 웹 크롤링 (1) - Selenium webdriver 설치 및 사용

파이썬 Selenium(셀레니움) webdriver를 사용해서 웹크롤링을 수행하기 위해 Selenium 모듈 설치, 사용할 브라우저, 브라우저의 드라이버를 설치해보고 사용방법을 간단히 알아본다. 추가적으로 chromedri

liveyourit.tistory.com

https://pythondocs.net/selenium/%EC%85%80%EB%A0%88%EB%8B%88%EC%9B%80-%EC%84%A4%EC%B9%98%EC%99%80-%ED%81%AC%EB%A1%AC-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EC%9E%90%EB%8F%99-%EC%B2%98%EB%A6%AC/

 

셀레니움 설치와 크롬 드라이버 자동 처리 - 뻥뚫리는 파이썬 코드 모음

셀레니움을 사용할 때는 드라이버가 필요하다. 파이어폭스는 geckodriver, 크롬은 chromedriver, 그외 PhantomJS 등 브라우저마다 각각의 드라이버가 필요하다. 이 드라이버는 버전이 업그레이드 될때마

pythondocs.net

https://ddolcat.tistory.com/935

 

[Python]크롬 드라이버 버전 오류 SessionNotCreatedException: Message: session not created: This version of ChromeDriver

파이썬 셀레니움(selenium)으로 크롤링할 때 발생되는 오류로, 기존에 다운받은 크롬브라우저용 드라이버가와 현재 사용중인 클롬 브라우저 보다 버전이 낮아서 발생되는 문제입니다. 지난주까지

ddolcat.tistory.com

 

이슈

WebDriverException: Message: chrome not reachable
  (Session info: chrome=97.0.4692.71)

browser.get() 에서 에러발생

 

webdriber 설치

pip install webdriver-manager

 

 

 

Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다'

> 이 에러문구때문에 끊어서 진행함

import urllib.request            # 파이썬에서 웹의 url 을 인식할 수 있게하는 모듈
from  bs4 import BeautifulSoup
from selenium import webdriver  # 크롬 웹브라우져를 자동으로 제어하기 위해 
from selenium.webdriver.common.keys import Keys  # 키보드를 컴퓨터가 알아서 누르기 위해서
import time                     # 중간중간 sleep 을 걸어야 해서 time 모듈 import
from tqdm import tqdm_notebook
# from webdriver_manager.chrome import ChromeDriverManager
import os
import pandas as pd
import re
########################### url 받아오기 ###########################

# 웹브라우져로 크롬을 사용할거라서 크롬 드라이버를 다운받아 위의 위치에 둔다
# 팬텀 js로 하면 백그라운드로 실행할 수 있음

binary = 'C:\\data\\chromedriver_win32\\chromedriver.exe'

# 브라우져를 인스턴스화
browser = webdriver.Chrome(binary)
# driver = webdriver.Chrome(ChromeDriverManager().intall())
# 광고자료실 url 받아옴
# for문으로 페이지 넘김
ad_url = []
aa_test = []
for i in tqdm_notebook(range(5,7)):  # 4페이지까지 완료, 6페이지까지 완료
    list_url = "https://www.kobaco.co.kr/site/main/archive/advertising/5?cp="+ str(i) +"&pageSize=8&sortDirection=DESC&arcUse=true&arcCategory=5&metaCode1=broadcast&adtDefaultYear=false"
    browser.get(list_url)

    time.sleep(5)                      # 네트워크 느릴까봐 안정성 위해 sleep 해줌
    html = browser.page_source         # 크롬브라우져에서 현재 불러온 소스 가져옴
    soup = BeautifulSoup(html, "lxml") # html 코드를 검색할 수 있도록 설정

    html_list = soup.select("div.bbs-gallery > ul > li > a")
    
    for h in html_list:
        ad_url.append(h.get("href"))
        
#     aa = []
    for a in ad_url:
        time.sleep(3)
        ad_site = "https://www.kobaco.co.kr" + a
        browser.get(ad_site)

        time.sleep(6)                      # 네트워크 느릴까봐 안정성 위해 sleep 해줌
        html2 = browser.page_source         # 크롬브라우져에서 현재 불러온 소스 가져옴
        soup2 = BeautifulSoup(html2, "lxml") # html 코드를 검색할 수 있도록 설정
        
        script_list = soup2.select("div.video-wrap > div > p ")
        content_list = soup2.find_all('td',class_='py-10 px-20 text-left')

        bb = []
        for con in content_list[0:4]:
            bb.append(con.text)   # 대분류, 소분류, 제목, 제작연도

        for scr in script_list:
            bb.append(re.sub('[\n|\r|\t]','',scr.text))  # 스크립트

        aa.append(bb)
        aa_test.append(bb)

browser.quit()
data = pd.DataFrame(aa)
data.columns = ['대분류', '소분류', '제목', '제작연도','스크립트']
data
# data.to_csv("c:\\data\\ad_list.csv")
반응형