위와 같이 입력했는데 soup 출력값이 전혀 안나와서 len 으로 확인해보니 0로 나오네요. 혹시나 해서 언론사 사이트 주소로 바꿔봤는데 html 정보 정상적으로 받아오는건 확인 했어요 강의 시점이랑 멜론 사이트가 뭐가 바뀐건지 앞 강의에서 네이버 부터 막혀서 해결되기전에 먼저 보려고 했는데 또 바로 막히네요...
네이버 뷰탭 실습부터 막혔는데요 지금은 뷰탭이 없어서 블로그 탭으로 대체해서 보고 있습니다. 네이버 사이트가 전체적으로 강의 시점이랑 html 구조가 많이 다른것 같아요 그리고 어떤 선택자를 선택해도 결과 출력이 되지 않길래 html를 출력해봤는데 검색 결과 자체가 안나오는 것 같더라구요 이 결과는 User Agent 를 지정하지 않았을 때 결과구요 위와 같이 User Agent를 적용하면 결과가 400 Bad Request로 떠요 url 프린트 해서 나오는 링크로는 검색결과로 제대로 접속되고 있어요 왜 이런건지 알 수가 없어서 질문드립니다. 시작부터 막히니 막막하네요 ㅠㅠ
현재까지 잘 따라왔는데 href 에서 막혀서 질문드립니다. 현재 네이버의 span class에서 제목은 가져왔습니다. 그런데 href는 윗 단계인 <a>에 있지만 class명이 복사하면 깨져서 나옵니다. 그래서 <a> 에 있는 href를 가져오지 못하고 있습니다. 더 한단계 위인 <div>를 사용해 보았지만 href는 불러오지 못했습니다. +++++++++++++++++++++++++ <div class=“”> <a nocr=“1” href=“…..” <span class=“………”>기사제목</span> </a> ++++++++++++++++++++++++++ 어떤 방법이 있는지 문의드립니다.
학습은 예전에 마쳤습니다. 내용 꽉꽉 채워진 훌륭한 강의 감사합니다. 그런데, 수업내용 프로젝트의 완성된 코드는 제공이 안되는지 궁금합니다. 압축파일로 제공된다던지 github 리파지토리를 통해 제공이 된다던지... 이 곳에서 답변이 어렵다면 jinwelcome1015@gmail.com 메일로라도 답변 부탁드립니다. 이상입니다. 감사합니다~
강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다. 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주 셔야 빠른 답변이 가능합니다. 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다. 답변은 바로 제공되지 않을 수 있습니다. 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다.
import requests from bs4 import BeautifulSoup keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) 위 코드 사용 시 아래와 같은 결과가 나타납니다. keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) # req = requests.get(url, headers=headers) # print(req.request.headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) <title>네이버쇼핑</title> </head> <body> <div class="content_error"> <div class="head">쇼핑 서비스 접속이 일시적으로 제한되었습니다. </div> <div class="desc"> 네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다. </div> <ul class="reason"> <li>상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속</li> <li>짧은 시간 내에 너무 많은 요청이 이루어진 IP</li> <li>VPN을 사용하여 접속한 IP</li> <li>특정 확장 프로그램 이용 시</li> </ul> <div class="footer">위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 <a href="https://help.naver.com/service/30016/category/5278" target="_blank"> 원클릭 진단</a>을 부탁드립니다.<br/> 해당 방법을 통해서도 접속이 불가한 경우 <a href="https://help.pay.naver.com/mail/form.help?alias=shopping_stop" target="_blank">네 이버쇼핑 고객센터</a>로 문의 부탁드립니다.</div> </div> </body> </html> 이런 상황에서 대안이 있을까요?
강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다. 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주셔야 빠른 답변이 가능합니다. 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다. 답변은 바로 제공되지 않을 수 있습니다. 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다. 최대한 구글링을 동원해서 해보는 중인데 막히네요. 모니터링 가서 로그 나오는것 까지 확인 했습니다. event, message, text 이렇게 표시 되는거요. def lambda_handler(event, context): result = json.loads(event["body"]) print(f"event : {event}") keyword = result["message"]["text"] news_crawler(keyword) 그다음 위의 코드 작성하고 run을 해보면 아래와 같이 body 키 문제가 있다고 나옵니다. 무슨문제일까요...ㅜ "errorMessage": "'body'", "errorType": "KeyError", "requestId": "628cac7e-f4ae-41f3-9ba3-ba7a3e7f464f", "stackTrace": [ " File \"/var/task/lambda_ function.py \", line 59, in lambda_handler\n result = json.loads(event['body'])\n"
강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다. 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주셔야 빠른 답변이 가능합니다. 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다. 답변은 바로 제공되지 않을 수 있습니다. 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다. 쿠팡 아이템 리스트를 html로 작성해서 호스팅 주소에 올리는 과정입니다. 파이썬 파일 돌리면 로그인 과정에서 실패합니다. 주소 id pw는 제대로 입력한 것 확인 했는데 무엇이 문제인지 알려주세요...
네이버 쇼핑 크롤링 1 강의를 수강하고 있습니다. 네이버 쇼핑 페이지에서 상품에 대한 태그를 추출함에 있어서 items에 데이터가 전혀 저장되지 않습니다. 코드도 완전히 동일한 것 같은데 어떤 문제가 있는 걸까요? from bs4 import BeautifulSoup import requests keyword = input("검색할 제품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, 'html.parser') items = soup.select(".adProduct_item__1zC9h") print(items) print(len(items)) 다음과 같이 []와 0만 출력되는 상황입니다.
강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다. 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주셔야 빠른 답변이 가능합니다. 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다. 답변은 바로 제공되지 않을 수 있습니다. 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다. 네이버에서 뉴진스 검색하면 view 탭이 없어서 카페 탭으로 대신 이동해보려고 합니다. XPATH 사용해서 카페로 이동할 때 >>"//*[text()='카페']"<< 이 방식을 사용하려고 하는데요 웹에서 '카페' 키워드 검색하면 텍스트가 6개 나옵니다. 원하는 요소 text가 여러개 있는 경우 어떻게 찾아나가는지 궁금합니다. 아래와 같이 해봤는데 안되었어요. driver.find_elements(By.XPATH, "//*[text()='카페']")[3].click()
By.XPATH를 이용한 태그 선택과 키워드 입력 방법 강의를 들었는데요. 강의에서 말씀하신대로 코드를 작성하였는데 키워드가 검색창에 입력이 되지 않습니다. 개발자도구에서 확인한 네이버 검색란 태그를 다음과 같이 확인하였습니다. 제가 입력한 코드는 아래와 같습니다. from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager import time options = Options() options.add_argument("--start-maximized") options.add_experimental_option("detach", True) service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options) url= "https://naver.com" # 요소 선택하는 법 # # driver.find_element(By.CLASS_NAME) # driver.find_element(By.ID) # driver.find_element(By.CSS_SELECTOR) # driver.find_element(By.NAME) # driver.find_element(By.TAG_NAME) # driver.find_element(By.XPATH) # driver.find_element(By.LINK_TEXT) # driver.find_element(By.PARTIAL_LINK_TEXT) driver.get(url) time.sleep(2) """ <input id="query" name="query" type="search" title="검색어를 입력해 주세요." placeholder="검색어를 입력해 주세요." maxlength="255" autocomplete="off" class="search_input" data-atcmp-element=""> """ driver.find_element(By.XPATH, '//input[@title="검색어를 입력해주세요."]').send_keys("박효신")
from selenium import webdriver from selenium.webdriver.chrome.options import Options # from selenium.webdriver.chrome.service import Service # from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import requests from bs4 import BeautifulSoup import time options = Options() user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" options.add_argument(f"user-agent={user_agent}") options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=options) url = "https://kream.co.kr/search?shop_category_id=34" driver.get(url) time.sleep(2) for i in range(1): driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") time.sleep(2) html = driver.page_source soup = BeautifulSoup(html, "html.parser") items = soup.select(".product_card") for item in items: brand = item.select_one(".product_info_brand.brand") name = item.select_one(".translated_name") link = item.select_one(".item_inner").attrs['href'] click = name.text driver.find_element(By.PARTIAL_LINK_TEXT, click).send_keys(Keys.CONTROL+Keys.ENTER) time.sleep(1) driver.switch_to.window(driver.window_handles[-1]) html = driver.page_source soup2 = BeautifulSoup(html, "html.parser") model_num = soup2.select_one("div:nth-child(3) > div.product_info") print(brand.text.strip()) print(name.text) print(model_num.text.strip()) print(f"https://kream.co.kr{link}") print() driver.close() driver.switch_to.window(driver.window_handles[0]) 아무것도 모르는 상태에서 시작했는데 좋은 강의 올려주신 덕분에 크롤링을 조금이나마 맛보게 된 것 같습니다. 어설프게나마 완성은 한거 같은데 궁금한게 있어서 질문 남깁니다. 상품 링크를 타고 들어가야 원하는 정보를 긁어올 수 있는 사이트인데, 자바스크립트로 동작하게끔 되어 있습니다. 시행착오 끝에 셀레니움으로 동작을 시켜봤는데 제품 하나하나마다 새창을 열어서 정보를 가져온 후에 창을 닫고.. 다시 새창을 열어서 정보를 가져온 후에 창을 닫고.. 하다보니 시간도 너무 오래 걸리고 이렇게 하는게 맞는 건지 의구심이 듭니다. 어떻게 해야 속도를 높힐 수 있을까요?
import requests from bs4 import BeautifulSoup headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } url = "https://www.melon.com/chart/index.htm" req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") lst50 = soup.select(".lst50") lst100 = soup.select(".lst100") # lst = lst50 + lst100 if lst50: lst = lst50 elif lst100: lst = lst100 else: print("!!!!!!!!!!!!!") # 자식선택자 > 는 바로 밑에 있을 때만 가능. 바로 밑에 있는게 아닐 때는 그냥 한칸 띄고 입력! for i in lst: title = i.select_one(".ellipsis.rank01 a") singer = i.select_one(".ellipsis.rank02 > a") album = i.select_one(".ellipsis.rank03 > a") print(title.text) print(singer.text) print(album.text) print() # for rank, i in enumerate(lst50, 1): # title = i.select_one(".ellipsis.rank01 a") # print(f"{rank} : {title.text}") # print() print(len(lst)) lst = lst50 + lst100 대신에 앞 시간에 설명해주셨던 if, elif, else 를 사용해봤는데 데이터가 50개만 나오는데, 왜 100개가 다 안나오는 건가요? 무슨 차이가 있는건지 궁금합니다.