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

정현수님의 프로필 이미지
정현수

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 기본편

선생님 기초 마지막강의질문입니다 ㅠㅠ

작성

·

203

1

스크롤까지 잘 내려갔는데, 각각 아이폰 제목 가격 url등등이 출력이 안됩니다 선생님 ㅠㅠ

find_element_by_* commands are deprecated. Please use find_element() instead

  browser.find_element_by_css_selector('body').send_keys(Keys.END)

이런 오류도 뜨구요 ㅠㅠ 전 어떻게 해야 할까요

from pkgutil import iter_modules
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
#브라우저 생성
browser=webdriver.Chrome('c:/chromedriver.exe')
#웹사이트 열기
browser.get('https://www.naver.com')
#쇼핑메뉴 클릭하기
browser.implicitly_wait(10)
browser.find_element_by_css_selector('a.nav.shop').click()
#검색창 클릭
time.sleep(2)
search=browser.find_element_by_css_selector('input.co_srh_input')
search.click()
#검새ㄱ어 입력
search.send_keys('아이폰13')
search.send_keys(Keys.ENTER)

#스크롤 전 높이
before_h=browser.execute_script("return window.scrollY")#Java스크립트 명령어 사용 가능
#무한 스크롤
while True:
    #맨 아래로 스크롤 내린다.
    browser.find_element_by_css_selector('body').send_keys(Keys.END)
    #스크롤 사이 페이지 로딩 시간
    time.sleep(1)
    #스크롤 후 높이
    after_h=browser.execute_script("return window.scrollY")
    if after_h==before_h:
        break
    before_h=after_h
#상품정보
items=browser.find_elements_by_css_selector('.basicList_inner__eY_mq')
for item in items:
    name=item.find_element_by_css_selector('.basicList_title__3P9Q7').text
    price=item.find_element_by_css_selector('.price_num__2WUXn').text
    link=item.find_element_by_css_selector('.thumbnail_thumb__3Agq6').get_attribute(href)
    print(name,price,link)

답변 2

1

정현수님의 프로필 이미지
정현수
질문자

엉엉 ㅠㅠㅠㅠ 선생님 정말 감사합니다꙼̈.
사실 제가 코딩 강의 들으면서 헷갈렸던게 메소드 적으면서 넣는 () 튜플 기호나 등등 ‘’ “” 의 차이도 모르겠구 ..
한 번 정리해주시면 정말 감사하겠습니다꙼̈ㅠㅠ
그리고 영어발음 정말 좋으세요! 언더바 ㅎㅎ
스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

제가 최근에 만든 강의를 보시면,

파이썬 기초 문법부터 차근차근 설명해 주고 있습니다 ^^ 

 

아래 유튜브 영상으로 확인해 보세요 ㅎㅎ

https://youtu.be/REUu0T1xsiU

0

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

안녕하세요.

코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다.

 

10초만에 빠르게 발견했습니다. 

점점 오타 발견하는 속도가 빨라 지는 것 같습니다 ㅋㅋ

 

get_attribute(href) 대신에 get_attribute('href')로 바꿔 보세요 

 

그리고 오류는, 셀레니움 4버전으로 업데이트하면 더이상 뜨지 않을 겁니다.

보너스 영상으로 첨부해 드렸습니다 ^^ 

 

그리고 아래는 제가 작성한 코드인데, 비교해 보세요 ㅎㅎ

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import csv

url = "https://www.naver.com"
browser = webdriver.Chrome('C:/chromedriver.exe')
browser.get(url)
browser.implicitly_wait(10)

# 쇼핑 메뉴 클릭
browser.find_element_by_css_selector("a.nav.shop").click()
time.sleep(2)

# 검색창 클릭
search = browser.find_element_by_css_selector('input.co_srh_input._input')
search.click()

# 검색어 입력
search.send_keys("아이폰 13")
search.send_keys(Keys.ENTER)

# 스크롤 전 높이
before_h = browser.execute_script("return document.body.scrollHeight")

# 무한 스크롤
while True:
    # 맨 아래로 스크롤 내린다.
    browser.find_element_by_css_selector("body").send_keys(Keys.END)

    # 스크롤 사이 페이지 로딩 시간
    time.sleep(1)

    # 스크롤 후 높이
    after_h = browser.execute_script("return document.body.scrollHeight")
    if after_h == before_h:
        break
    before_h = after_h

# 파일 생성
f = open(r"C:\source\startcoding\startcoding_crawling\03_네이버_쇼핑_크롤링\data.csv", 'w', encoding='CP949', newline='')
csvWriter = csv.writer(f)

# 상품 정보 div
items = browser.find_elements_by_css_selector(".basicList_info_area__17Xyo")

for item in items:
    name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
    try:
        price = item.find_element_by_css_selector(".price_num__2WUXn").text
    except:
        price = "판매중단"
    link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href')
    print(name, price, link)
    csvWriter.writerow([name, price, link])

f.close()
정현수님의 프로필 이미지
정현수

작성한 질문수

질문하기