해결된 질문
작성
·
218
0
기존에 사용하던게 Visual code여서 이거 하나로만 사용하고 싶어서 코드로 복사하여 사용하고 관련 라이브러리를 설치하고 실행했는데 오류가 발생해서요. 혹시 Visual code에서도 실행할 수 있는 방법이 있을까요??
C:\StartCode>C:/Users/dantr/AppData/Local/Microsoft/WindowsApps/python3.10.exe c:/StartCode/교육/test1.py
c:\StartCode\교육\test1.py:21: DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
Traceback (most recent call last):
File "C:\Users\dantr\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\common\service.py", line 72, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2032.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 969, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2032.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 1438, in executechild
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\StartCode\교육\test1.py", line 21, in <module>
driver = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
File "C:\Users\dantr\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in init
self.service.start()
File "C:\Users\dantr\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\common\service.py", line 81, in start
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
답변 2
0
안녕하세요. 강의자 입니다.
위에 에러메시지는 크롬웹드라이버가 정상적으로 설치되지 않아 나오는 메시지로 보입니다.
해당 강의에서 제공하는 코드중에 아래 내용이 해당되는데요
!apt install chromium-chromedriver
개인 pc에서 진행하신다면 직접 설치를 해주셔야 될것 같습니다.
셀레니움도 설치되지 않으셨을거 같아서 해당 내용 설치 방법을 포함하여 공유드립니다.
[ 설치방법 ]
1. pip update
python -m pip install --upgrade pip
2. 셀레니움 설치
pip install selenium
3. chrome webdriver 설치
http://chromedriver.chromium.org/downloads
이후에 아래 코드를 실행시키시면 정상적으로 구동될것 같습니다.
감사합니다.
[ 파이썬코드(.py) ]
# 셀레니움 module import
from selenium import webdriver
import time
from time import sleep
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys
import requests
import re
import os
# Dataframe
import pandas as pd
df = pd.DataFrame(columns=['idx','star','review'])
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('disable-dev-shm-usage')
chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
driver = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
############################################################################################################
name = ['안나플러스 4GF 스킨']
ns_address = "https://search.shopping.naver.com/catalog/15557524473?cat_id=50000326&frm=NVSCPRO&query=%EB%82%A8%EC%9E%90+%EC%8A%A4%ED%82%A8&NaPm=ct%3Dkxr4r4og%7Cci%3Dbe66e0fd1148fe228f8dfec6a63f62a8cd13f44d%7Ctr%3Dsls%7Csn%3D95694%7Chk%3Dfc0f09570f2b00e1ca5f8ef3bb02e9d7dfe08eea"
shoppingmall_review = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[2]/div/div[2]/ul/li[5]/a"
category_total = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[2]/div[2]/ul/li[1]/a"
############################################################################################################
header = {'User-Agent': ''}
driver.implicitly_wait(3)
driver.get(ns_address)
req = requests.get(ns_address,verify=False)
html = req.text
soup = BeautifulSoup(html, "html.parser")
sleep(2)
element=driver.find_element_by_xpath(shoppingmall_review)
driver.execute_script("arguments[0].click();", element)
sleep(2)
driver.find_element_by_xpath(category_total).click() #스크롤 건드리면 안됨
cnt=1
page=1
# 페이지 단위로 처리하지 않으면 http request가 너무 많아서 error로 튕겨냄
while True:
j=1
print ("페이지", page ,"\n")
sleep(2)
while True: #한페이지에 20개의 리뷰, 마지막 리뷰에서 error발생
try:
star = driver.find_element_by_xpath('/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/ul/li['+str(j)+']/div[1]/span[1]').text.replace("평점","")
review = driver.find_element_by_xpath('/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/ul/li['+str(j)+']/div[2]/div[1]').text
j+=1
print(star+'//', cnt, review , "\n")
df.loc[cnt] = [cnt, star, review]
cnt+=1
except:
print('['+str(page)+'] 페이지 종료')
break
sleep(2)
if page == 15:
break
if page < 11:#page10까지 적용
try: #리뷰의 마지막 페이지에서 error발생
page +=1
next_page = driver.find_element_by_xpath('/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[3]/a['+str(page)+']').click()
except:
print('error point 2')
break #리뷰의 마지막 페이지에서 process 종료
else :
try: #page11부터
page+=1
if page%10==0: next_page=driver.find_element_by_xpath('/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[3]/a[11]').click()
else : next_page=driver.find_element_by_xpath('/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[3]/a['+str(page%10+2)+']').click()
except:
print('error point 3')
break
df.to_excel('웹크롤링리뷰.xlsx')
0
안녕하세요. 강의자 입니다.
본 강의는 구글 콜랩을 기준으로 만들어진 강의라 개인 pc에 파이썬을 설치하셔서 진행하시기에는
강의 소스코드를 그대로 사용하기 어려운 부분이 있으셨을거 같습니다.
일단 간단하게 차이점을 말씀드리면, 로컬pc에서 파이썬을 사용하실경우 라이브러리의 설치 경로와 구글 콜랩 기준의 라이브러리 설치경로가 다릅니다. 그리고 디폴트로 제공되는 라이브러리가 구글콜랩과 visual studio 간 다소 차이가 있습니다. 이로인해 강의 소스코드를 그대로 복붙 하실경우 위와 같은 에러메시지가 노출되실것으로 보입니다.
질문 주신 내용에 대해서는 제가 visual studio 기준의 소스코드를 금주중에 공유드리겠습니다.
불편함이 있으셨다면 죄송하다는 말씀을 드립니다. 즐거운 하루 되세요. 감사합니다.