묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
쇼핑몰 크롤링 select, select_one 차이
잔재미코딩 선생님 우선 강의 정말 잘 듣고 있습니다.감사합니다. ^^ 크롤링 프로그램 완성: 크롤링한 데이터에서 다시 크롤링하기1 (업데이트)에서 질문드립니다. 수업자료에 올려주신 select로 태그를 가져오는 과정에서지마켓 bestitems는 왜 one으로만 작동하는 건지 궁금합니다.강의 찍어주시던 시기에는 bestitems 클래스가 2개가 있어서 select_one이 아닌 select를 사용하셨거든요. 이렇게 넣으면 왜 오류가 나는지 궁금해서 글을 남깁니다. 인터넷에 select와 select_one의 차이에 대해 찾아 봤으나 답을 얻지는 못해 문의드리게 되었습니다. 소중한 강의로 코딩을 알아가게 해주신 점 다시 한번 감사드립니다. ^^ #해당 코드import requestsfrom bs4 import BeautifulSoupres = requests.get('http://corners.gmarket.co.kr/Bestsellers?viewType=G&groupCode=G06')soup = BeautifulSoup(res.content, 'html.parser')# 2022.09.13 수정사항 (웹사이트 코드가 수시로 변경되면서, best-list class 를 가진 태그가 하나이기 때문에 해당 태그만 선택하도록 수정)bestitems = soup.select('div.best-list') # select_one() 은 해당 조건에 맞는 태그 하나만 선택하는 함수products = bestitems.select('ul > li')for index, product in enumerate(products): title = product.select_one('a.itemname') price = product.select_one('div.s-price > strong') print (title.get_text(), price.get_text(), title['href']) #문의 내용bestitems = soup.select('div.best-list') ^찾는 값이 1개인 경우에는 무조건 one을 적어야 하는 것일까요?
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
해결이 안되네요
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 업데이트 from selenium.webdriver.common.keys import Keys import time import pyautogui import pyperclip # 브라우져 꺼짐 방비 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"] ) service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) # 웹페이지 주소로 이동 driver.implicitly_wait(5) # 웹 페이지가 로딩될 때까지 5초 기다림 # driver.maximize_window() # 브라우저크기 최대화 driver.get("https://map.naver.com/v5") search = driver.find_element(By.CSS_SELECTOR,"input.input_search") search.click() time.sleep(1) search.send_keys("제주 게스트하우스") time.sleep(1) search.send_keys(Keys.ENTER) time.sleep(1) # iframe 안으로 들어가기 driver.switch_to.frame("searchIframe") # iframe 나올 때 # driver.switch_to_default_content() # 무한스크롤 하기 ## iframe 안쪽을 한번 클릭하기 driver.find_element(By.CSS_SELECTOR,"#_pcmap_list_scroll_container").click() ## 로딩된 데이터 갯수 확인 lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL") before_len = len(lis) while True : # 맨 아래로 스크롤을 내린다. driver.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) # 페이지 로딩 시간을 준다 time.sleep(1.5) # 스크롤 후 로딩된 데이터 개수 확인 lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL") after_len = len(lis) # 로딩된 데이터 개수가 같다면 반복 멈춤 if before_len == after_len: break before_len = after_len # 데이터 수집 ## lis에 모든 가계의 정보가 담겨있음 for li in lis: # 별점 있는 것만 선택 stars = driver.find_elements(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em") if len(stars)>0: # 가계이름 store_name = li.find_element(By.CSS_SELECTOR,"span.place_bluelink.moQ_p").text star_point = li.find_element(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em")위에서 store_name까지는 출력이 잘 되는데...star_point를 추가하고 출력하면 아래와 같은 에러가 발생합니다. 아무리 해봐도 해결이 안되네요..
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
네이버 금융 크롤링 질문
안녕하세요. 네이버 금융 크롤링 강의 중 질문이 있어서, 글 남깁니다. 우선 강의를 보면 아래와 같이, 코딩되어있습니다.soup.select() 코드 중 "onmouseover%" 이 부분 통해서 필요한 정보를 가지고 오고 있습니다.다만, 제가 실습할때는 참고할 수 있는 값들이 좀 달랐습니다.(아래 캡쳐 화면 참고 부탁드리겠습니다.) 제가 작성한 코드는 가장 아래 코드 참고 부탁드립니다.우선, 아래와 같이 정보를 가져옵니다.trs = soup.select("table.type_5 > tbody")-> 이 경우 trs값은 [] 빈 리스트로 찍히고 있는데, 제가 혹시 잘못 가져온걸까요? 그 이후, 빈칸의 경우 td[colspan]값으로 확인해서, 아래 코드로 해당 정보는 지우도록 하였습니다.td_cols = tr.select("td[colspan]") for td_col in td_cols: td_col.decompose() import requests from bs4 import BeautifulSoup url = "https://finance.naver.com/sise/field_submit.naver?menu=lastsearch2&returnUrl=http://finance.naver.com/sise/lastsearch2.naver&fieldIds=per&fieldIds=roe&fieldIds=pbr&fieldIds=reserve_ratio" response = requests.get(url) html = response.text soup = BeautifulSoup(html, "html.parser") ## 변경 코드 ## trs = soup.select("table.type_5 > tbody") #trs = soup.select("table.type_5") print("================================") print(trs) print("================================") for tr in trs: print("Sdsd") """td_cols = tr.select("td[colspan]") for td_col in td_cols: td_col.decompose() """ # nth-child 사용하는 방법 name = tr.select_one('td:nth-child(2)').text per = tr.select_one('td:nth-child(7)').text roe = tr.select_one('td:nth-child(8)').text pbr = tr.select_one('td:nth-child(9)').text reserve_ratio = tr.select_one('td:nth-child(10)').text print(name, per, roe, pbr, reserve_ratio) 위 말씀드린 과정을 통해서 코드 수행 시 정상적으로 동작하지 않는데, 관련해서 답변 주시면 감사하겠습니다!!
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 기본편
pyautogui 모듈을 다운 받았는데
ModuleNotFoundError: No module named 'pyautogui' 모듈을 찾을수가 없다고 하네요. 지우고 다운 받고 반복 했으나 찾을수가 없다고 합니다.. 버전이 안맞는건지 모르겠네요