[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
강의 제목 : 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트) 섹션 7 - IT/데이터 분야를 위한 지식: XML 데이터 포멧 다루기1 (업데이트) 해당 영상의 강의자료 " XML_AND_CRAWLING_FUNCODING.txt "가 ipynb 파일이 아니라 txt파일로 업로드가 되어있습니다. 직접 파일 형식을 .ipynb로 변경해보려 했지만 어려움이 있었습니다. 번거로우시겠지만 ipynb 파일로 다시 업로드해주시면 정말 감사하겠습니다.
네이버쇼핑 크롤링 수강 중입니다. 데이터를 엑셀로 저장시 링크를 하이퍼링크로 저장 하고 싶습니다. 즉, 엑셀 오픈해서 링크를 클릭하면 해당 물건이 바로 열리도록 하고 싶습니다. 아래 1번은 되는데, 2번은 되지 않습니다. 문제는 엑셀에서 하이퍼링크 저장시 255자 제한이 있어서 그런 거 같습니다. 데이터 저장 시 해결할 방법이 있을까요? 네이버 링크 link = '=HYPERLINK("' + " https://www.naver.com " + '","링크")' 쇼핑몰 링크 =HYPERLINK(" https://cr.shopping.naver.com/adcr.nhn?x=GwvRQqYCu%2BX8ZwpHCECcSv%2F%2F%2Fw%3D%3DsIn%2F3Yf0iawU%2FzYEzOgBb07i9rrLilELSXaeDEWTHUjtksg%2BYslp4t2Zt1cdDccTdi7DZdZimWRXHZMabDRX2%2B0qx7Bhh0Caeclo2i1Y7qOjFHLn4wLuCnoHhSfPE4oks1bvHhHAfdqzhIkba38yyQMi30QtKP1mA7BYZPpxeJLexWvZfe2todmJfmpbNrXnq6vlxEEPFYikY%2FFgWDJTeh03Mlu1kRkTyoaI3uw69wpRITi0bKHCP2rGy6hahVn%2B%2FZFBJ7H6pZqRmC993ssAkNKg2IE65NtMdlJVi06ALuC2AbCY81f975eS5nfR25FBiP83WAv8GAIoQ0MwLPWeb%2FcJtwFagNdosKd1Zse6UhJ%2BzaLo3YojXuQJMvdaZ%2BI%2FyctBNJeJkeiSk%2FpIY4IZgm7f5ZWpM0X6C8Lqgv9yl84OxyTNOpvF5JKAAUscSxRXpeCJA4vgneLxHO126ixVGIQneuqvZhheEd%2B4ASDHeLEMX6dOjXdNdhYZO31pYVC%2BHCJkBzybiEA%2BrGVfnMGK9vAlypD3xRxtfsji%2Flj2GA5OdSlPOZBN6V54TTL6u%2FzFsCXIMYKkzT061mzrwfgc%2F8GThNu%2B1yBb0rg6nns0Ykn3LVWGr8fvvH1mWvUgXPK6j&nvMid=21813412965&catId=50013800 ","링크")
강의 너무 재밌고 유익하게 완강하였습니다. 감사합니다~ ^^ 제가 네이버 플레이스에서 맛집을 추출하려고 하는데 json형태로 제공이 되는데 json형태로 제공되는 사이트를 크롤링하고 데이터를 파싱하는 방법은 강의 내용에는 없던데 어떻게 하면 좋을까요? ㅠㅠ 혹시 강의를 추가해주실수도 있을까요?
기존에 막힐 때마다 다시 보면서 공부하던, 네이버&구글 이미지 클롤링 섹션과 미쳐 보지 못했던 예약 감시 크롤링이 사라지고, 현재 지금의 커리큘럼으로 리뉴얼되었는데요. 섹션8과 9 그리고 10은 오픈 예정으로 닫혀있는 상태가 맞는 것인지 확인 부탁드려요. 언제쯤 오픈되는 건가요? 그리고 기존의 강의는 사라진 건가요?
import requests from bs4 import BeautifulSoup response = requests.get("https://finance.naver.com/news/mainnews.naver") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select(".block1") title = articles.select_one(".articleSubject > a").text print(title) AttributeError : ResultSet object has no attribute 'select_one'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()? 오류가 나오는 이유를 모르겠습니다. .block1 을 찾아서 articles이라는 변수에 저장하고 이 변수에서 .articleSubject 를 찾아서 출력하려고 하면 왜 오류가 나는 걸까요? 매번 이 부분에서 한번씩 막혀서 이렇게 저렇게 바꾸다 보면 해결은 되는데 왜 저 문구가 오류가 나는건지 너무너무너무 궁금합니다.
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]) 아무것도 모르는 상태에서 시작했는데 좋은 강의 올려주신 덕분에 크롤링을 조금이나마 맛보게 된 것 같습니다. 어설프게나마 완성은 한거 같은데 궁금한게 있어서 질문 남깁니다. 상품 링크를 타고 들어가야 원하는 정보를 긁어올 수 있는 사이트인데, 자바스크립트로 동작하게끔 되어 있습니다. 시행착오 끝에 셀레니움으로 동작을 시켜봤는데 제품 하나하나마다 새창을 열어서 정보를 가져온 후에 창을 닫고.. 다시 새창을 열어서 정보를 가져온 후에 창을 닫고.. 하다보니 시간도 너무 오래 걸리고 이렇게 하는게 맞는 건지 의구심이 듭니다. 어떻게 해야 속도를 높힐 수 있을까요?
scroll_by_amount로 바뀌면서 시작하는 위치를 설정할 수 없게 된 것 같은데, 만약 인피니티 스크롤 하려고 할 때, 해당 마우스 포인터가 특정한 섹션에 있어야지 인피티니 스크롤을 할 수 있는 페이지라면 어떻게 설정을 해야될까요? 따로 sx, sy와 같이 해당 부분을 고정시키는 방법은 없을까요?
안녕하세요. 강사님, 실습 라이브러리 설치하기 (requirements.txt) 위해서 어느 폴더에 자료를 저장해야하나요? 가상환경 study로 들어가서 서브로 디렉토리를 따로 만들어야하나요? 아니면 C: drive 개인폴더에 자료저장 공간을 임의로 만들어서 진행해도 되는지요?
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
질문에 앞서 먼저 좋은 강의를 제작해주셔서 감사합니다. :) 여러 강의를 들어봤는데 해당 수업이 가장 이해하기 좋은 예제와 설명을 해주셔서 공부하는데 너무 큰 도움이 됐습니다. ㅡㅡㅡㅡㅡㅡㅡ질문내용ㅡㅡㅡ "데이터 분석, 데이터 과학 전과정을 쉽게! 단계별로! 꼼꼼하게 익히기" 로드맵을 통해 "파이썬입문과 크롤링기초 부트캠프를 수료한 학생입니다. 다름 아니라 로드맵 코스 중 "처음하는 SQL과 데이터 베이스 부트캠프" 와 처음하는 MongoDB와 No SQL 강의가 있는데 MongoDB 강의도 필수적으로 들어야 후에 있는 커리큘럼 강의를 이해할 수 있는지 궁금합니다. "처음하는 SQL과 데이터베이스 부트캠프" 강의 수료 후, 바로 "처음하는 파이썬 분석(pandas) 강의와 이후 강의를 들어도 강의를 이해하는데 문제가 없는 지 질문드립니다.
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
아직 강의가 chat gpt 이용하는 것 까지 강의가 몇 개 남아있습니다만, 현재 Claude 3 를 결제하고 프로로 사용 중인데 주변 서적이나 강의 등을 보면 Chat GPT 를 이용한 내용만 있던데 Claude 3 로는 할 수 없는 걸까요? Chat GPT 로 갈아타야하는 걸까요...?
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개가 다 안나오는 건가요? 무슨 차이가 있는건지 궁금합니다.
안녕하세요, 상세 페이지 내용 크롤링에서 막혀 있다가 이번에 올려주신 리뉴얼 강의 덕분에 해결했습니다. 그런데 페이지 이동에서 다시 막혔습니다. 아래는 제가 만든 코드입니다. 첫번째 페이지는 잘됩니다. 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 from bs4 import BeautifulSoup import time import requests from webdriver_manager.chrome import ChromeDriverManager chrome_options = Options() chrome_options.add_experimental_option("detach", True) service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) driver.implicitly_wait(5) driver.maximize_window() driver.get("https://www.dbpia.co.kr/search/topSearch?searchOption=all&query=%EA%B0%80%EC%A7%9C%EB%89%B4%EC%8A%A4") html = driver.page_source soup = BeautifulSoup(html, 'html.parser') articles = soup.select("article.thesisWrap") for article in articles: title = article.select_one("h2.thesis__tit").text info = article.select_one(".thesisAdditionalInfo").text link = 'https://www.dbpia.co.kr' + article.select_one(".thesis__summary > a").attrs['href'] response = requests.get(link, headers={'User-Agent':'Mozilla/5.0'}) html = response.text soup = BeautifulSoup(html, 'html.parser') try: abstract = soup.select_one("div.abstractTxt").text except: " " print(title,info,abstract) 수업에서는 1페이지, 2페이지.... 이렇게 바뀔 때 url이 바뀌는 경우를 알려주셨는데 제가 크롤링하려는 페이지는 매우 고약하게도...url이 바뀌지 않습니다. 첫페이지 다음의 두번째 페이지부터 계속 url에 '#a'만 붙습니다. 이런 경우 1페이지 다음 2페이지, 3페이지 등 다음 페이지 내용을 크롤링할 수 있는 방법이 있을까요? 해당 사이트 url입니다. https://www.dbpia.co.kr/search/topSearch?searchOption=all&query=%EA%B0%80%EC%A7%9C%EB%89%B4%EC%8A%A4#a 1.<전체 화면> <확대 화면: URL> <확대 화면 : F12 - 소스코드> driver.find_element(By.CSS_SELECTOR, ".dpPaging__link:nth-of-type( 1 ) ").click() 이렇게 페이지에 따라 CSS 선택자를 만들고 숫자만 바꿔서 하려고 했는데 for문을 적용할 수가 없네요.... 실전편에서 동적 페이지 크롤링 강의 오픈 예정이던데 이런 내용도 다뤄주시면 감사하겠습니다.