• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

적용 학습

22.10.02 11:20 작성 조회수 753

0

안녕하세요

리뷰 크롤링 하는 과정에서 다른 페이지에 적용 학습해보다가 에러코드가 떠서 질문드립니다.

name                = ['언더아머 CGI 다운']
ns_address          = 'https://search.shopping.naver.com/search/all?query=cgi%20%EB%8B%A4%EC%9A%B4&frm=NVSHATC&prevQuery=%EB%89%B4%EB%B0%9C%EB%9E%80%EC%8A%A4%EB%B0%94%EB%9E%8C%EB%A7%89%EC%9D%B4'
shoppingmall_review = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[1]/ul/li[3]/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)'

 

에러 -

/usr/local/lib/python3.7/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)
---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-30-8a5c5adbf17a> in <module>
      6 soup = BeautifulSoup(html, "html.parser")
      7 sleep(2)
----> 8 element=driver.find_element_by_xpath(shoppingmall_review)
      9 driver.execute_script("arguments[0].click();", element)
     10 sleep(2)


3 frames


/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py in find_element_by_xpath(self, xpath)
    392             element = driver.find_element_by_xpath('//div/td[1]')
    393         """
--> 394         return self.find_element(by=By.XPATH, value=xpath)
    395 
    396     def find_elements_by_xpath(self, xpath):

/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py in find_element(self, by, value)
    976         return self.execute(Command.FIND_ELEMENT, {
    977             'using': by,
--> 978             'value': value})['value']
    979 
    980     def find_elements(self, by=By.ID, value=None):

/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[1]/ul/li[3]/a"}
  (Session info: headless chrome=105.0.5195.102)

 

그리고 다음 url과 같이 나타낼 페이지가 그리 많지 않은 경우에도 같은 소스코드 양식을 사용해도 될까요?

https://search.shopping.naver.com/catalog/29274895216?query=cgi%20%EB%8B%A4%EC%9A%B4&NaPm=ct%3Dl8qn5dbs%7Cci%3Dcc97712ba6dec8be52ea670a2e607bb755d59f4f%7Ctr%3Dslsl%7Csn%3D95694%7Chk%3D97fd029ce7fc81750ad0a1d2110ad155b54fe09d

 

감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. 강의자입니다.
우선 문의주신 내용 관련해서 확인해보니 해당 페이지의 fullXpath 정보가 강의 예제로 사용하는 사이트와 달라서 인식을 못했던것으로 보입니다. shoppingmall_review와 category_total 정보를 아래 내용을 참고해주시면 정상적으로 될 것으로 보입니다.

참고로 예제 이외에 다른 상품의 리뷰 크롤링을 진행하실 경우 예제 코드를 그대로 복붙하시면 에러가 발생하는 경우가 있을 수 있습니다. 그럴경우 개발자 도구로 해당 사이트에 직접 접속하셔서 copy full xpath 기능을 활용하시길 추천드립니다.

 

shoppingmall_review = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[2]/div/div[2]/ul/li[3]/a"                      
category_total      = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[5]/div[2]/div[2]/ul/li[1]/a"

 

추가로 위에 문의주신 URL에 대해서도 같은 소스코드 양식을 사용할순 있습니다만 shoppingmall_review와 category_total 정보를 그대로 사용하시면 동일한 에러가 발생할 것 같습니다.
아래 내용을 참고하셔서 shoppingmall_review와 category_total 값 (파이썬에서 변수라고 부릅니다.) 세팅을 해주시면 될 것 같습니다.

시간 내서 문의 남겨주셔서 감사드리고, 추가로 이해 되지 않으시는 부분이나 질문 있으시면 언제든 글 부탁드리겠습니다.
감사합니다.


< shoppingmall_review > 가져오기

image

< category_total >
image