월 26,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[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 개정판] 이것이 진짜 크롤링이다 - 실전편
원본 소스 부탁 드립니다.
강사님 기본과 실전 수강중에 있는데요어느 부분에서 계속 오류가 걸리는 경우를 보면거의 오타가 많아요지금도 오류에 멈춰서 있습니다.해서 원본 소스를 주시면 제 문제점 찾는데큰 도움이 될 것 같아요. 메일로 부탁 드립니다.( kim691220@naver.com )
- 미해결[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 selenium.webdriver.common.keys import Keys import time import pyautogui import os # 검색어 입력. keyword = keyword = pyautogui.prompt("검색어를 입력해주세요.") # 저장 폴더 중복 검사 pd_exists = os.path.exists(f'{keyword}') # 조건에 따른 저장 폴더 생성법 ① if True == pd_exists: pass else: os.mkdir(f'{keyword}') # 조건에 따른 저장 폴더 생성법 ② # if not pd_exists: # os.mkdir(f'{keyword}') # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 자동 꺼짐 방지하기 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메세지 안보이게 하기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 크롬드라이버매니저를 통해서 최신 크롬드라이버를 자동으로 설치하고, # service 객체를 만들어 변수에 저장. service = Service(executable_path=ChromeDriverManager().install()) # 크롬 열고, 화면 최대화 browser = webdriver.Chrome(service=service, options=chrome_options) browser.maximize_window() # 검색어 입력했을때, 네이버 이미지 탭 결과 리스트창 browser.get(f"https://search.naver.com/search.naver?where=image&query={keyword}") # 웹페이지가 로딩 될 때까지 10초 기다림. 뜨면 바로 10초 안채워도 넘어감. browser.implicitly_wait(10) # 무한 스크롤 처리 # 스크롤 내리기 전 위치 before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: #맨 아래로 스크롤 내리기 browser.find_element(By.CSS_SELECTOR, "body.wrap-new.api_animation.tabsch.tabsch_image").send_keys(Keys.END) # 스크롤 사이 페이지 로딩 시간 time.sleep(3) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h전에 수업때 만들었던 무한스크롤 파일에선 잘 동작하는데 네이버 이미지 크롤링에서 시도하면 작동이 안됩니다. ㅠㅠ find_element(By. TAG_NAME, "body").send_keys(Keys.END)로 해도 스크롤이 밑으로 안 내려갑니다.새해 복 많이 받으세요!
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
SyntaxError: invalid syntax 모르겠습니다
SyntaxError: invalid syntax 에러가 뜨는데디버깅없이 실행, python파일 디버그로 실행하면 정상적으로 실행이 됩니다.왜이런지 알 수 있을까요 ㅜㅜ
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
소스코드 받고 싶습니다.
안녕하세요 스타트코더님전체소스코드 받고 싶습니다.제가 공부했던 코드들이 다 날라가서요.부탁드립니다. 수고하세요.
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
첫번째페이지크롤링 질문~!!!!
import requests from bs4 import BeautifulSoup main_url = "https://www.coupang.com/np/search?component=&q=%EA%B2%8C%EC%9D%B4%EB%B0%8D+%EB%A7%88%EC%9A%B0%EC%8A%A4&channel=auto" # 헤더에 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: sub_url = "https://www.coupang.com" + link.attrs['href'] response = requests.get(sub_url, headers=header) html = response.text soup = BeautifulSoup(html, 'html.parser') #try: #brand_name = soup.select_one("a.prod-brand-name").text #except: #brand_name = "" # 브랜드명 #try: #brand_name = soup.select_one("a.prod-brand-name").text #except: #brand_name = "" #print(brand_name) # 상품명 #product_name = soup.select_one("h2.prod-buy-header__title").text #product_name = "" # 가격 #product_price = soup.select_one("span.total-price > strong").text #product_price = "" #print(brand_name, product_name, product_price) for 문 안에 soup 를 print로 찍어보니 <html lang="en"> <head> <script type="text/javascript"> document.location.replace("https://www.coupang.com/"); </script> </head> <body></body> </html><!DOCTYPE html> <html lang="en"> <head> <script type="text/javascript"> document.location.replace("https://www.coupang.com/"); </script> </head> <body></body> </html> 이렇게 나와서 아래의 soup.select_one 값이 공백으로 나오네요.brand_name = soup.select_one("a.prod-brand-name").text 강의랑 코드를 몇번씩 계속 돌려보는데도 이해가 안가네요
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
headers를 추가했지만 크롤링이 감지 되어 연결이 제한 되었습니다. 이를 방지하기 위한 다른 방법이 있을까요?
네이버 쇼핑몰 크롤링 진행중 무리하게 실험하다가 사이트 연결이 제한 되었습니다 ㅜㅜheaders를 추가하면 괜찮을줄 알았는데..다음에는 미리 방지하고자 headers 추가 말고도 다른 방법이 있을까요?
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
실제 쇼핑몰 사이트 결과와 셀레니움으로 접속한 결과가 다릅니다.
직접 접속하는 경우 상품 목록 셀레니움으로 접속한 경우 상품 목록둘다 주소가 똑같지만 네트워크 목록도 다르고 상품 목록도 다르게 뜨네요.왜 이런 현상이 일어날까요?
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
cookie를 자동으로 업데이트 하는 방법이 있을까요?
https://kwonkyo.tistory.com/529해당 블로그의 방법처럼 joson 형식을 직접 코드에 작성하여 네이버 쇼핑 크롤링을 완성 하였습니다. 대신 이 방법대로 하면 매번 코드에 cookies,headers,params 를 작성해 줘야하는데요.headers와 params는 매번 똑같아도 괜찮지만 cookies는 매일 달라지는 것 같습니다?이 경우에는 cookies를 자동으로 업데이트 시켜줘야 할 것 같은데어떤 방법이 있을까요?구글링 하여 session 방법도 나름 시도해 보았지만 잘 해결되지 않아 질문 드립니다.아래는 코드 입니다.import requests from bs4 import BeautifulSoup import json page = 1 keyword = "과자" print(f"------------------{page}페이지--------------------") cookies = { 'NNB': 'WUXWWRMOOVZWG', 'nx_ssl': '2', 'NaverSuggestUse': 'use%26unuse', 'NFS': '2', '_ga': 'GA1.2.1826370085.1669177707', '_ga_8P4PY65YZ2': 'GS1.1.1670556699.3.1.1670556781.0.0.0', 'autocomplete': 'use', 'AD_SHP_BID': '14', 'ASID': '0e221f9100000185044256e400000053', 'SHP_BID': '4', 'demo': 'm-20', 'nid_inf': '856411158', 'NID_AUT': 'HZYH2iEU+pydap3C2ZeK6SYL11+ZQZzCIxAEVW3QF+iQi6lSXeyTWKIk5Q2u+b9S', 'NID_JKL': 'SVy2JH/PZVBFeP9cfyNUo3IgRz5c4Q/O3D1m7qX2s00=', 'page_uid': 'hHD3nsp0YihssMEgEXGssssssBd-506797', 'spage_uid': 'hHD3nsp0YihssMEgEXGssssssBd-506797', 'NID_SES': 'AAABnE+3Z8P/zCp3/+XE9IwB85rhcdGolR2WTfQ+4pgrPTDVp5OXKvHRGfHLRDEkgIPkWbhnTGodcztE7cv9hlVOxWbV/AzVGwmPzQZaD1fLKkFAp6C6687HIZnNTsT4eV03q6QZxMfBOw8XTTfsuYRwsYwbkJDEuKeXXmfFFdC2cy3sGgI6ZPG3ktjZIyg+rkfuxcf1ctpeNOHDdt8KmCKlPx5dstYGtlbWHjZo3A4nW6uaRMt+2C9GB/GLrR01RhYR/MO3V75Cs+QMLbaFjcH3rqDH3hW1Af72MHP7GhbefTHvhHrFUtKAgYUgL2GTT/1He52YtfMgiHlr9nkw9vOA+IxGJMTrzGfA2QhJ2ygbYbET/srzrBzN/wc1S9f/1l11d7SKh0V/wlAyputCtanuhm3zErFBEVVnVmnb4ZuMt0suYkOzi4npFMt9DDbZF0a94Jg/hCpqQpOJyZExpW27Lus6vVtTVMKtGhHKdIWIqQj/sazKIizGDZO/kCkB2B3UZ7Mifr8++HX/JRctca8Xhy2Raq4k4LeLgdfzBJUy8YPk', 'sus_val': 'bREWstOPzGuz2c6tT/IjoDSm', '_naver_usersession_': 'MBrk5lhOc1WegHzbQgb1fDhq', 'listOffset': '5', 'lastProductClick': '%EA%B8%B0%EB%8A%A5%EC%84%B1%20%EC%8B%A0%EB%B0%9C%20%EA%B9%94%EC%B0%BD%20%EC%95%84%EC%B9%98%20%EC%97%90%EC%96%B4%20%EC%BF%A0%EC%85%98%20%EC%9A%B4%EB%8F%99%ED%99%94%20%EC%9D%B8%EC%86%94%5E30260232791', 'ncpa': '6303604|lbmlel28|f29a4f23c2092dd24530afa9813bf4ed43f67312|s_18330e9a745fc|413a3e4b2505b6496c591b071aef2b79c21ebc52:3779889|lbmn6v3s|16785f2b11b65ae4a89a094ca2bc118dc954d556|s_16dc887ee7e95|02e93fa21fc6031ec88bcb6689e7cff18c15665b:5690384|lbmnnr4o|b4c6a1cf1d35097780f135a25c5799f57c65aede|s_19db0b627c733|01e7ef1e0ef2246ac863510bbb29e0a36a0033e3:165568|lbms7ec0|ead632e1b5f336c51e62da580208075272c11459|s_3422b8e1086835|47f818e032ceb6be564e3ff644b883ec359a265e:955149|lbnl92mg|b70c701a1fa1d38c1f581fcc23b30398d4adcc90|s_284221eac5eff|2f245a3ca6021c0dfb29a16bf7c07ec3c04396a7:225323|lbnmb480|2b37c0d8ddc982beacf11112bde0a117667fa270|s_5febb6e0220e1431|00c43677ce145a64eda592347157206e1dbd56d6:114|lbnr0s8w|54bc64a1453b4478949117b8889af402d3167367|s_1f0b6dd34481|165f45347c0201202f68fb81d77ad2bb5359ff6e:17703|lbns2kl4|26027c84c330407b41db82948a4fcaa33e7310d7|s_1f0b6dd345b2|2c70c3b6f7b0fcc2318cc94f852a990489505190:2680908|lbnsxh8o|462894807013beea343e192f633c808c7a42aabb|s_7d847d844c1e|a273843fa1cab15b4f2d4c666bc1fb930901383e:95694|lbntoqq0|d1c8fb101d9c85a5ff547a1b0785720da86641af|95694|477f8709aa2b405357c709a92412bb560da31300', } headers = { 'authority': 'msearch.shopping.naver.com', 'accept': 'application/json, text/plain, */*', 'accept-language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7', 'logic': 'PART', 'referer': f'https://msearch.shopping.naver.com/search/all?frm=NVSHPAG&origQuery=%ED%81%B0%EC%8B%A0%EB%B0%9C%EA%B9%94%EC%B0%BD&pagingIndex={page}&pagingSize=40&productSet=total&query=%ED%81%B0%EC%8B%A0%EB%B0%9C%EA%B9%94%EC%B0%BD&sort=rel&viewType=lst', 'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36', } params = { 'query': f'{keyword}', 'sort': 'rel', 'pagingIndex': f'{page}', 'pagingSize': '40', 'viewType': 'lst', 'productSet': 'total', 'frm': 'NVSHPAG', 'origQuery': f'{keyword}', } response = requests.get('https://msearch.shopping.naver.com/api/search/all', params=params, cookies=cookies, headers=headers) itemlist = json.loads(response.text) cnt_1 = 1 print("=============광고 상품==============") try: for i in itemlist['searchAdResult']['products']: print(cnt_1) print(i["productTitle"]) print(i["mallProductId"]) cnt_1 +=1 except: print("============광고 상품 없음===================") cnt = 1 print("=============일반 상품==============") for i in itemlist['shoppingResult']['products']: print(cnt) print(i["productTitle"]) try: if i["mallProdMblUrl"][0] =="h": print(i["mallProdMblUrl"]) print(i["mallProductId"]) except: print(i["id"]) cnt +=1
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
뉴스 본문 링크 가져오기 오류
import requests from bs4 import BeautifulSoup response = requests.get("https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90") 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를 추출 response = requests.get(url) html = response.text soup = BeautifulSoup(html, 'html.parser') print(url) 강의보고 그대로 코드를 작성하였는데아래와 같이 오류가 뜨네요if (isinstance(value, str) or isinstance(value, collections.Callable) or hasattr(value, 'match') ^^^^^^^^^^^^^^^^^^^^AttributeError: module 'collections' has no attribute 'Callable'
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
g마켓 모바일 크롤링 가능한가요?
pc는 가능한데 모바일은 안되서 모바일 사이트는 크롤링 할때 다른 팁이 있는지 궁금합니다.http://browse.gmarket.co.kr/m/search?keyword=%EB%8B%AD%EA%B0%80%EC%8A%B4%EC%82%B4
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
response.get 질문입니다.
안녕하세요. 개인적으로 스크래핑 기술로 간단한 앱을 만들어보고 싶어서 이 강좌를 수강하고 있습니다. response.get 으로 스크래핑이 제대로 실행이 되지 않는 사이트들도 있나요?이를 테면, 밑의 코드를 보면 프린트 값이 빈 [] 이거나 아무값이 표시되지 않습니다. 이러한 경우에는 어떻게 해야하나요? import requests import pyautogui from bs4 import BeautifulSoup # keyword = pyautogui.prompt('USE YOUR HEAD AND SEARCH IT.') # response = requests.get(f"https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}") response = requests.get("https://www.fromjapan.co.jp/en/item/search/kaptain+sunshine/Al_11_Yh_RaSuBpOmRm_N_N_0A00ja00_N/lgk-link_top_search") html = response.text soup = BeautifulSoup(html, "html.parser") items = soup.select(".shop-item") print(items) for item in items: print(item)
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
엑셀 자동 줄 바꿈 추가 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.파이썬을 이용해 엑셀에서 자동줄바꿈 되는 코드를 알려주셔서 정말 감사하게 잘 활용하고 있는데요. 추가적으로 질문 드리고 싶은 부분은 자동 줄 바꿈의 경우는 원하는 위치에서 개행이 되지 않는데요.원하는 위치에서 개행이 되게하는 코딩도 있을까요? 아래의 이미지는 자동줄바꿈을 했을 경우인데요.위의 이미지처럼 자동줄바꿈을 해주려면 아래와 같은 코딩으로 해결이 됐는데요.ws['d1'].alignment = Alignment(wrap_text=True) 저는 아래의 이미지 처럼 줄바꿈을 하고 싶어서요위와 같이 줄바꿈을 하려면각각 아래처럼 변수에 넣고 코딩을 해주면 될까요?a= '12345'b='6789'코딩을 어떻게 하면 좋을지 궁금해서 문의 드립니다. 구글링을 해봤는데, 자동줄바꿈 코딩은 있는데 수동 줄바꿈과 관련한 코딩은 못찾겠습니다.ㅠ
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
뭐가 문제인지 잘 모르겠습니다!!
강의 내용대로 했을때 url이 출력이 잘 되는데...아래 코드로 실행하면 에러메시지는 없는데 아무것도 출력이 안됩니다..뭐가 잘못 된건지 궁금합니다.import requests from bs4 import BeautifulSoup base_url = "https://m.search.naver.com/search.naver?where=m_news&sm=mtb_jum&query=" keyword = input("검색할 단어를 입력하세요 : ") search_url = base_url + keyword response = requests.get(search_url) 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") # 이것의 결과는 list if len(links) >= 2 : #링크가 두 개 이상이면, list의 길이는 len()을 이용, div태그에 a태그가 둘 있음 url = links[1].attrs['href'] # links 의 두번째 요소를 가져옴. 두번째 요소가 네이버뉴스 링크이고 첫번째 요소는 언론사 뉴스링크임. attrs()로 href 속성선택 print(url)
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
웹드라이버가 m1에서 작동하지 않는것 같습니다..
크롬 드라이버 자동 업데이트 부분에서부터 막히네요ㅜㅜ 이렇게 현재 m1에서는 웹드라이버가 정상적으로 작동하지 않고 있습니다ㅜㅜ 구글링해보니 얼마 안된 이슈인듯하네요ㅜㅜ
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
워드 클라우드 관련 문의 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의 되로 입력 후 실행 하였는데 AttributeError: AttributeError: 'NoneType' object has no attribute 'text 가 뜹니다. 도움 요청 드립니다. =============================================================import requests from bs4 import BeautifulSoup import time import pyautogui import pyperclip # 사용자입력 keyword = pyautogui.prompt("검색어를 입력하세요") lastpage = int(pyautogui.prompt("몇 페이지까지 크롤링 할까요?")) # 본문 전체 내용 total_content = "" # 기사 개수 article_num = 0 page_num = 1 for i in range(1, lastpage * 10, 10): print(f"{page_num}페이지 크롤링 중입니다.===========================") response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jump&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 를 추출 # 다시 requests 날려준다. response = requests.get(url, headers={'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/ 105.0.5195.102 Safari/537.36 '}) html = response.text soup = BeautifulSoup(html, 'html.parser') # 연예 뉴스 체크 if "entertain" in response.url: content = soup.select_one("#articeBody") elif "sports" in response.url: content = soup.select_one("#newsEndContents") # 본문 내용안에 불필요한 div, p삭제 divs = content.select("div") for div in divs: div.decompose() paragraphs = content.select("p") for p in paragraphs: p.decompose() else: content = soup.select_one("#articleBodyContents") print("==========본문===========\n", content.text.strip()) total_content += content.text.strip() article_num = article_num + 1 time.sleep(0.3) page_num = page_num + 1 print(f"{article_num}개 기사 크롤링 완료!!") pyperclip.copy(total_content) pyautogui.alert("클립보드에 복사되었습니다.") 이상입니다.
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
첫페이지 크롤링 실행이 안됩니다.
import requests from bs4 import BeautifulSoup main_url = "https://www.coupang.com/np/search?q=%EA%B2%8C%EC%9D%B4%EB%B0%8D%20%EB%A7%88%EC%9A%B0%EC%8A%A4&channel=recent" # 헤더에 User-Agent를 추가하지 않으면 오류가 남 response = requests.get(main_url,headers={'User-Agent' : 'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html,'html.parser') links = soup.select("a.search-product-link") # select의 결과는 리스트 자료형(여러개) print(links)
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
쿠팡에서 검색된 상품에 대한 광고클릭으로 인해..
쿠팡 검색 결과 저장 관련해서 광고상품 제거 코드를 넣어도 상품단에 접속하는게 아닌가 싶습니다아래 수집된 URL 를 보면ads 클릭 이벤트 아이디가 생성되는걸로 보입니다그렇다는건 검색광고를 클릭했다는 말인데 문제 발생 소지 있지 않을까 걱정됩니다. https://www.coupang.com//vp/products/6445801857?itemId=13971883834&vendorItemId=81441184342&sourceType=srp_product_ads&clickEventId=98e60fc6-9d41-46a6-a201-850240aa16fe&korePlacement=15&koreSubPlacement=12&clickEventId=98e60fc6-9d41-46a6-a201-850240aa16fe&korePlacement=15&koreSubPlacement=12
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
네이버 지도 크롤링 iframe 창 클릭 관련해서 문의드립니다.
계속 고민하다가 답을 못찾아서 문의드립니다.우선 접근한 url은 iframe으로 올라오는 url에 대해 직접 접근하였습니다.문제는 스크롤 다운이 안되네요. 다른 예제들로는 잘 내려갔었는데..의심되는 원인으로는아래 id값을 통해 창이 제대로 클릭되지 않는 케이스입니다.browser.find_element(By.CSS_SELECTOR, "#_pcmap_list_scroll_container").click()스크롤 다운이 제대로 되지 않는 경우 browser.execute_script("window.scrollTo(0, document.documentElement.scrollHeight)") #이부분1번일 가능성을 높게보는데, 이것저것 해봤는데 정답을 못찾았네요. 혹시 원인 유추 가능할까요?전체 소스코드는 아래와 같습니다.감사합니다. from openpyxl import Workbook import requests from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) url = "https://pcmap.place.naver.com/restaurant/list?query=성수동+파스타" service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options) browser.implicitly_wait(10) browser.maximize_window() browser.get(url) browser.find_element(By.CSS_SELECTOR, "#_pcmap_list_scroll_container").click() #이부분 before_h = browser.execute_script("return document.documentElement.scrollHeight") print(before_h) for i in range(0,10): browser.execute_script("window.scrollTo(0, document.documentElement.scrollHeight)") #이부분 time.sleep(1) after_h = browser.execute_script("return document.documentElement.scrollHeight") print(after_h) if after_h == before_h: break before_h = after_h restaurant_names = browser.find_elements(By.CSS_SELECTOR, ".place_bluelink.TYaxT") for restaurant_name in restaurant_names: print(restaurant_name.text)
- 미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편
검색어를 구현하는 방법
URL에서 검색어 쿼리 부분을 조작하는 방법과 검색어를 입력하는 태그 부분을 조작해서 클릭해주는 방법 두 가지가 있는 것 같은데.. 네이버 지도 크롤링에서는 두 번째 방법을 사용하는 이유가 있을까요?하던대로 URL을 조작하는 방법도 잘 되는 것 같아서요. 두 가지 방법은 어떤게 더 좋다라고 할 수는 없고 웹사이트의 구조에 따라 선택해서 사용하나요?