inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

텍스트를 포함하는 태그 찾기 (feat.정규표현식)

쿠팡 첫페이지 관련 href 오류가 뜹니다.

해결된 질문

558

김민석

작성한 질문수 3

1

강의노트에 올려주신 코드를 그대로 복붙해서 실행시켰는데,

C:\CRAWLLING> cmd /C "C:\Users\libra_erv8ij1\AppData\Local\Programs\Python\Python312\python.exe c:\Users\libra_erv8ij1\.vscode\extensions\ms-python.python-2023.20.0\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher 1693 -- "c:\CRAWLLING\CRAWLING 심화\ch3. 쿠팡크롤링\01.첫번째페이지크롤링.py" "

Traceback (most recent call last):

File "c:\CRAWLLING\CRAWLING 심화\ch3. 쿠팡크롤링\01.첫번째페이지크롤링.py", line 20, in <module>

sub_url = "https://www.coupang.com" + link.attrs['href']

~~~~~~~~~~^^^^^^^^

KeyError: 'href'

href 관련 오류가 나옵니다. 왜그러는걸까요?

 

python 웹-크롤링

답변 1

2

스타트코딩

사이트가 업데이트 되었습니다.

상세페이지 링크 값이 href에 들어 있지 않고, data-product-link에 있네요.

그리고 베스트 셀러 상품들이 추가 되었는데 얘들은 data-link라는 속성안에 있습니다.

아래 처럼 코드를 수정해 주면 정상적으로 작동 됩니다.

 

import requests
from bs4 import BeautifulSoup

main_url = "https://www.coupang.com/np/search?component=&q=usb%ED%97%88%EB%B8%8C&channel=user"

# 헤더에 User-Agent, Accept-Language 를 추가하지 않으면 멈춥니다
header = {
    'Host': 'www.coupang.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3',
}

response = requests.get(main_url, headers=header)
html = response.text
soup = BeautifulSoup(html, 'html.parser')

links = soup.select("a.search-product-link") # select의 결과는 리스트 자료형
for link in links:
    
    if link.attrs.get('data-product-link'):
        # 일반 상품 링크
        sub_url = "https://www.coupang.com/" + link.attrs['data-product-link']
    else:
        # 베스트셀러 상품 링크
        sub_url = "https://www.coupang.com/" + link.attrs['data-link']

    response = requests.get(sub_url, headers=header)
    html = response.text

    soup = BeautifulSoup(html, 'html.parser')

    # 브랜드명은 있을 수도 있고, 없을 수도 있어요
    # - 중고상품일 때는 태그가 달라져요
    # try - except로 예외처리를 해줍니다
    try:
        brand_name = soup.select_one("a.prod-brand-name").text
    except:
        brand_name = ""
    
    # 상품명
    product_name = soup.select_one("h2.prod-buy-header__title").text

    # 가격
    product_price = soup.select_one("span.total-price > strong").text

    print(brand_name, product_name, product_price)

 

셀레니움 환경설정 오류

0

65

2

네이버 로그인 관련

0

298

2

안녕하세요 셀레니움에 대해서 질문

0

95

1

크롤링 연습사이트 문의

0

110

2

선택자 질문

0

84

2

'특정 요소가 나타날 때까지 스크롤' 부분 에러

0

86

2

자동 로그인 질문

0

98

2

44강 제목, 링크

0

108

1

원하는 값이 없을 때

0

96

2

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

0

234

2

셀레니움 PDF자료는 받을 수 있나요

0

103

2

글목록 추출하기

0

105

2

메일 자동화 로그인 중복방지문자해결 오류 및 명시적 대기 질문

0

93

2

강의 노트가 어디에 있는건가요?

0

81

2

강의 커리큘럼 질문

0

105

1

조건문 else 사용하지 않는 이유

0

79

2

셀레니움으로 접근할 수 없는 경우

0

101

2

웹페이지 변경

0

76

2

자바스크립트로 태그 선택 시 질문입니다.

1

67

2

수료증은 어떻게 받나요?

0

123

2

class명을 활용하여 선택자를 만들지 않는 경우..?

0

64

2

드라이버가 안 열려요

0

84

2

이거 해결방법 아시는 분?

0

123

2

네이버 지식인 크롤링..

0

209

2