안녕하세요. FW 시즌 vs SS 시즌별로 피부 고민의 차이를 좀 분석해볼려고 하고요. 네이버 뉴스 크롤링 코드에서 날짜 부문을 추가해서 수집하려고 하는 데 오류가 발생하는 상황입니다. 날짜 HTML은 제대로 불러오는 것 같은데요... 출력에서 조금만 검토해주셨으면 하는 부분이 있습니다. 제가 추가로 작성한 부분은 빨간색으로 색칠해두었습니다. ------------------------------------------------------------------------------------------------------------------------ keyword = pyautogui.prompt("검색어를 입력하세요.") lastpage = pyautogui.prompt("마지막 페이지번호를 입력하세요.") # 엑셀 생성 wb = Workbook() ws = wb.create_sheet(keyword) # 행번호 row = 1 # 열 너비 조절 ws.column_dimensions['A'].width = 60 ws.column_dimensions['B'].width = 60 ws.column_dimensions['C'].width = 120 page_num = 1 for i in range(1, int(lastpage)*10, 10): print(f"{page_num}페이지 크롤링 중입니다.") response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출 for article in articles: links = article.select("a.info") if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href 추출 # 다시 request를 날려 준다 response = requests.get(url, headers={'User-Agent' : 'Mozila/5.0'}) html = response.text soup_sub = BeautifulSoup(html, 'html.parser') # 연예 뉴스 체크 if "entertain" in response.url: title = soup_sub.select_one(".end_tit") content = soup_sub.select_one("#articeBody") date = soup_sub.select_one("div.article_info > span > em") else: title = soup_sub.select_one(".media_end_head_headline") content = soup_sub.select_one("#newsct_article") date = soup_sub.select_one("span.media_end_head_info_datestamp_time._ARTICLE_DATE_TIME") print("=======링크======= \n", url) print("=======제목======= \n", title.text.strip()) print("=======본문======= \n", content.text.strip()) print("=======날짜======= \n", date) # w저장 ws[f'A{row}'] = url ws[f'B{row}'] = title.text.strip() ws[f'C{row}'] = content.text.strip() ws[f'D{row}'] = date.text.strip() # 자동 줄바꿈 기능 ws[f'C{row}'].alignment = Alignment(wrap_text=True) row = row + 1 time.sleep(0.3) # 마지막 페이지 여부 확인하기 isLastPage = soup.select_one("a.btn_next").attrs['aria-disabled'] if isLastPage == 'true': print("마지막 페이지입니다.") break page_num = page_num + 1 # 워드 문서 저장하기 wb.save(f"{keyword}_result.xlsx") ============================================================================================ =======날짜======= <span class="media_end_head_info_datestamp_time _ARTICLE_DATE_TIME" data-date-time="2022-06-05 09:42:02">2022.06.05. 오전 9:42</span> 출력이 이렇게되는 데요. 2022.06.05. 오전 9:42만 받아보게끔 하는 방법이 있을까요?
현재 네이버 지도 크롤링 시도 중인데, 클릭하지 않으면 나오지 않는 가게의 상세 주소까지 크롤링하고 싶습니다 첫 번째 방법으로는 하나씩 누르면서 크롤링하는 방법과 두 번째 방법으로 개발자도구에 script 에 있는 가게 code를 따서, url에 넣어서 결합한 뒤 새로 코드를 짜서 반복문으로 돌려서 상세 주소를 가져오는 방법을 생각 중입니다 제 생각에는 2번이 수월할 것 같아 하려고하는데, 아래와 같이 script라는 것 아래에 json 형태로 저장되어 있는 것 같습니다 다만, 제 실력이 미숙하여 어떤 방식으로 입력해도 잘 못따오는데 가게 코드를 따오기 위해 혹시 참고할 강의나.. 방법이 있을까요!? 현재 하고 있는 코드는 아래와 같으며, 첫번째 방법도 가능할지 선생님께 조언 구해봅니다 from selenium.webdriver.common.keys import Keys from selenium import webdriver import time import openpyxl from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wb = openpyxl.Workbook() ws = wb.create_sheet("1페이지") ws.append(["순위","이름","방영일","프로그램"]) browser.get("https://pcmap.place.naver.com/restaurant/list?query=%EB%A7%9B%EC%9E%88%EB%8A%94%EB%85%80%EC%84%9D%EB%93%A4%20%EB%A7%9B%EC%A7%91&x=127.510209&y=36.5851932&bounds=125.8897257%3B35.304463%3B131.3279581%3B37.8016307&isCurrentLocationSearch=true&tvProgram=false&x=128.4255012&y=36.254532&ts=1644222834366&mapUrl=https%3A%2F%2Fmap.naver.com%2Fv5%2Fsearch%2F%25EB%25A7%259B%25EC%259E%2588%25EB%258A%2594%25EB%2585%2580%25EC%2584%259D%25EB%2593%25A4%2520%25EB%25A7%259B%25EC%25A7%2591%3Fc%3D14194371.5368239%2C4381444.7119141%2C7%2C0%2C0%2C0%2Cdh#") browser.implicitly_wait(10) wait = WebDriverWait(browser, 10) # element = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='_pcmap_list_scroll_container']"))) element.click() #로딩된 데이터 개수 확인 lis = browser.find_elements_by_css_selector("li._1EKsQ._12tNp") before_len = len(lis) while True: #맨 아래로 스크롤 내린다 browser.find_element_by_css_selector("body").send_keys(Keys.END) #스크롤 사이 페이지 로딩 시간 time.sleep(2) #스크롤 후 로딩된 데이터 개수 확인 lis = browser.find_elements_by_css_selector("li._1EKsQ._12tNp") after_len = len(lis) #로딩된 데이터 개수가 같다면 반복 멈춤 if before_len == after_len: break before_len = after_len # 데이터 기다리는 시간을 0으로 만들어 줘요. (데이터가 없더라도 빠르게 넘어감) browser.implicitly_wait(0) rank = 1 for li in lis: #광고 상품 아닌 것만 if len(li.find_elements_by_css_selector("svg._2ulu3")) == 0: #별점이 있는 가게만 크롤링 if len(li.find_elements_by_css_selector("span._2FqTn._1mRAM>em")) > 0: #가게명 name = li.find_element_by_css_selector("span.OXiLu").text # 프로그램 program = li.find_element_by_css_selector("div._1fp5H._1tGBC > div").text #방영일 star = li.find_element_by_css_selector("div._3hn9q > div > a").text print(rank, name, star, program) ws.append([rank, name, star, program]) rank = rank + 1 wb.save("1페이지.xlsx")
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 앵귤러에서 네이버 분석 스크립트를 설치하려 하는데 SPA이다 보니 한 페이지로만 인식되서 도저히 읽히지를 않네요. 네이버 측에서도 SPA관해서는 가이드를 따로 주지않네요 ㅠㅠ index.html에 공통 스크립트를 설치했고, 나머지 페이지 이동이 될때 읽히 지가 않네요. 해보신 분 계시면 꿀팁있을까요.