강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Jay Kang님의 프로필 이미지
Jay Kang

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

크롤링한 링크가 엑셀로 들어가면 작동이 안되요

작성

·

20

0

안녕하세요

제 40강의 '카카오 톡딜 크롤링'과제에 대하여

정확히 코드를 입력해서

원하는 정보는 다 크롤링이 되었습니다.

그런데

엑셀로 저장해서 열어보면 아래와 같은 문제가 잇습니다.

 

  1. 엑셀을 열었을때 링크의 하이퍼링크가 활성화가 안됩니다. 이 문제는 모든 엑셀파일에서 나타납니다. 설정에서 웹형태의 문자는 하이퍼링크로 되게끔하였지만 파란색으로 활성화가 안되고 셀을 한번 클릭해야만 활성화가 됩니다.

  2. 그런데, 톡딜 과제에서만 이 두번째 문제가 발생하는데, 파란색으로 하이퍼링크 활성화가 되어 클릭해봐도 아무런 창이 열리지가 않습니다. 어떤문제인지 모르겠어요. vs code에서는 단순히 크롤링한 링크를 출력하면 창이 잘 열립니다(수업에서 선생님이 하신것과 동일하게). 그런데 datafram 만들고 엑셀로 저장해서 열면 하이퍼링크 활성화도 안되어 있고, 셀을 클릭해서 파란색으로 변해도 브라우저가 열리지 않습니다.

이렇게 되면 최종 output을 고객이 받아도 문제가 생길것 같은데... 어떤문제일까요? 엑셀에 문제가 있는걸까요.. 부탁 드립니다.

답변 2

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

안녕하세요!

저는 다시 결과물을 확인했을때 하이퍼링크가 잘 동작하네요!

 

우선 하이퍼링크에 오타가 없는지 잘한번 확인해 보시구요.

오타가 없는대로 하이퍼링크가 활성화 되지 않는다면 아래 가이드를 따라서 해결해 보는 것을 추천드립니다 🙂

 

<제가 작성한 코드>

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import time
import pandas as pd

# 크롬 드라이버 생성
driver = webdriver.Chrome()

# 페이지 이동
driver.maximize_window()
driver.get("https://shoppinghow.kakao.com/siso/p/sale/mall/talkstore")
time.sleep(1)

for i in range(1, 6):
    if i == 1:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    else:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight - 1000)")
    time.sleep(1.5)

# 상품명, 상세페이지링크, 판매가격, 판매처, 배송정보
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

data = []
items = soup.select(".list_spsale.__tiara_container_ > li")
for item in items:
    name = item.select_one(".info_name").text
    link = 'https://shoppinghow.kakao.com/' + item.select_one(".link_product").attrs['href']
    price = int(item.select_one(".info_sales").text.replace(',', '').replace('원', ''))
    shop = item.select_one(".txt_shop").text
    shipping = item.select_one(".info_etc").contents[-1].strip()
    # print(name, link, price, shop, shipping)
    data.append([name, link, price, shop, shipping])

df = pd.DataFrame(data, columns=['상품명', '상세페이지링크', '판매가격', '판매처', '배송정보'])

df.to_excel('kakao_shopping_crawling.xlsx')
driver.quit()

 

<Gemini pro 답변>

💡 가장 확실한 해결 방법: 코드 수정하기

 

가장 좋은 해결책은 파이썬 코드 자체를 수정해서, 엑셀 파일에 '이건 하이퍼링크입니다'라고 명확하게 알려주는 것입니다. 엑셀의 HYPERLINK 함수를 사용하도록 코드를 살짝만 바꿔주면 됩니다.

아래와 같이 to_excel 실행 전, 데이터프레임의 링크 부분을 수정하는 코드 한 줄을 추가해 보세요.

 

# ... (데이터 수집 코드 생략) ...

df = pd.DataFrame(data, columns=['상품명', '상세페이지링크', '판매가격', '판매처', '배송정보'])

# 아래 한 줄을 추가해주세요!
# '상세페이지링크' 열의 모든 URL을 엑셀의 HYPERLINK 함수 형태로 바꿔줍니다.
df['상세페이지링크'] = df['상세페이지링크'].apply(lambda url: f'=HYPERLINK("{url}")')

df.to_excel('kakao_shopping_crawling_hyperlink.xlsx', index=False)

추가적으로 확인해볼 사항 (엑셀 설정)

 

만약 위 방법으로도 해결이 안 되거나, 코드 수정이 어려운 상황이라면 엑셀 설정을 확인해볼 수 있습니다.

  1. 엑셀 옵션 확인

    • 파일 > 옵션 > 언어 교정 > 자동 고침 옵션으로 들어갑니다.

    • 입력할 때 자동 서식 탭에서 '인터넷과 네트워크 경로를 하이퍼링크로 설정' 항목이 체크되어 있는지 확인해주세요. (아마 이미 체크되어 있을 가능성이 높습니다.)

  2. 보안 센터 설정 확인

    • 파일 > 옵션 > 보안 센터 > 보안 센터 설정으로 들어갑니다.

    • 신뢰할 수 있는 위치외부 콘텐츠 설정이 너무 엄격하게 되어있어 링크 실행을 막고 있을 수 있습니다. 하지만 이 부분은 보안과 관련된 설정이므로 신중하게 변경하시는 것이 좋습니다.

Jay Kang님의 프로필 이미지
Jay Kang
질문자

감사합니다! 확인해보겠습니다

Jay Kang님의 프로필 이미지
Jay Kang
질문자

여러가지 방법 다 확인해보았는데, 결국 문제는 엑셀 버전 문제인것 같습니다. 제 버전이 엑셀 2013인데 2016이하 버전일 경우 url이 너무 길면 작동이 안될 수 있다고 하더군요. ㅎㅎ. csv로 받아서 google sheet로 불러오면 아무 문제 없습니다. 엑셀을 최신버전으로 올려야 할 것 같습니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

Jay Kang님, 크롤링한 데이터를 엑셀로 저장할 때 하이퍼링크 문제가 발생하신 것에 대해 도움을 드리겠습니다.

  1. 하이퍼링크가 기본적으로 비활성화되는 문제:
    엑셀에서 하이퍼링크를 자동으로 활성화하고 싶다면, 데이터 형식이 잘못 적용될 수 있어서 관련 설정을 확인해 보시는 것이 좋습니다. 종종 데이터가 텍스트 형식으로 저장되면 하이퍼링크가 자동으로 인식되지 않을 수 있으니, 텍스트 형식을 하이퍼링크로 변경해 보는 것도 방법입니다.

  2. 활성화는 되었지만 링크가 작동하지 않는 문제:
    파란색으로 하이퍼링크가 변하더라도 링크 클릭 시 브라우저가 열리지 않는 문제는 링크 주소의 형식이 맞지 않기 때문일 수 있습니다. 크롤링한 링크에 http:// 또는 https://가 포함되어 있는지 확인해 주세요. 이러한 프로토콜이 누락되면 브라우저가 URL을 올바르게 인식하지 못할 수 있습니다.

VS Code에서는 정상적으로 작동하지만, 엑셀에서는 작동하지 않는 경우라면 데이터 프레임에서 엑셀로 저장하는 과정에서 형식이 깨지지 않았는지 꼭 확인해 보세요. Pandas의 to_excel() 함수를 사용하는 경우 sheet_name과 함께 index=False 옵션도 시도해 보세요.

문제가 지속되면, 엑셀 삽입 기능이나 외부 링크 연결 기능을 통해 직접 링크를 걸어주는 방법도 고려해 보실 수 있습니다. 프로그램에서 각 하이퍼링크를 클릭했을 때 브라우저에서 새 창이 열리도록 확인하는 것도 잊지 마세요.

도움이 되셨길 바랍니다. 추가적인 질문이 있다면 언제든지 말씀해 주세요. 감사합니다.

Jay Kang님의 프로필 이미지
Jay Kang
질문자

감사합니다! 확인해보겠습니다

Jay Kang님의 프로필 이미지
Jay Kang

작성한 질문수

질문하기