전체 스터디
전체 스터디
  • 전체보기
  • 질문
  • 숙제
내 스터디
  • 스터디에 참여해보세요!
다른 스터디
  • 파이썬 기초 스터디
  • 네이버 정복 파이썬 크롤링
  • 페이스북 만드는 웹개발
  • 데이터사이언스 12시간 입문기
  • 파이썬 구글 Sheet 연동
  • 엑셀서당 - 훈장님의 기초 엑셀 트레이닝
  • 고전게임을 만들며 배우는 코딩의 기초
  • 내 업무를 거의 자동화하는 방법
  • SQL 입문 4시간
  • QR 코드 프로그래밍
  • 비전공자 개발지식 총정리
  • 초고속 퍼포먼스 마케터
  • 왓챠 함께 만들기
  • 퍼블리셔 초고속 입문기
  • 한국형 커뮤니티 만들기
  • airbnb 프론트엔드 카피 프로젝트
  • 워드프레스로 쿠팡 만들기
석민제
9월 17일 10:14 · 석민제의 팀 크롤링

네이버 쇼핑 상품리뷰를 크롤링 하는데 뒤로 갈수록(60페이지 이상?정도부터) 페이지 이동이 이상해서 질문드려요! 코드상 문제가 있는건지 궁금합니다! 

이헌영
9월 17일 14:26

민제님 안녕함세요 :) 올려주신 코드 살펴보았는데요,

기존 코드의 페이지를 클릭하는 부분

page_buttons[page % 11 + 1].click()

에서 한 페이지에서 선택할 수 있는 페이지의 수는 10개인데 %연산자 11을 입력해주셔서 해당하는 문제가 발생한 것 같아요 :) 

page_buttons[page % 10 + 1].click()

와 같이 수정해주시면 문제없이 수집이 되는 것을 확인하실 수 있습니다. 

*기존코드에서도 11페이지부터는 페이지 수집이 섞여서 되었던 것 같아요 :)

좋아요 0

    또 다시 크롤링 질문입니다...

    https://www.une-une.co.kr/outer?productListFilter=120864

    이 페이지를 크롤링하고 있는데요.
    section.section div.productListPage > div.shopProductWrapper div.price > span 이렇게 선택자를 지정해주면 가격 정보를 크롤링해와야하는데 파이썬이 None을 출력합니다.


    웹페이지 소스를 살펴보니 실제 코드에는 가격 정보가 값이 없더라고요. 구글 개발자 도구에서는 가격 정보가 나오는데 말이죠...식스샵의 개발팀에서 뭔가 개발할 때 이런식으로 정보가 노출되도록 개발을 한 것인지 어떤지 잘 모르겠으나...이럴 때는 어떻게 가격정보를 크롤링할 수 있을까요? ㅜㅜ

    자세히 보기
    최도근
    8월 28일 15:42

    보통 그 데이터가 동적으로 출력될 때 생기는 현상입니다..! selenium을 이용해보세요. requests는 정적인 페이지(실제 코드에 가격정보가 있는 경우)에서만 사용가능합니다.

    좋아요 0
      유재원
      8월 29일 12:48

      네 그럴 것 같았습니다. selenium으로 다시 해보겠습니다. 감사합니다. :)

      좋아요 0

        크롤링 관련 질문입니다.

        div.box > div.description > div.price와 같은 형태의 HTML구조에서 가격 정보를 크롤링하고 있는데요. 상품이 품절인 경우에 div.box > div.description > div.price에서 div.price는 사라지고 대신 div.soldout이 생겨서 구조가 div.box > div.description > div.soldout으로 변합니다.

        if price is None: 
         countine

        이런식으로 조건문을 써봤는데 작동하지 않네요. 이번 뿐만 아니라 이런 경우가 꽤 있어서 해결하고 싶습니다.

        질문을 요약하면 beautifulsoup의 select로 특정 class를 찾는데 실패한 경우, 해당 변수에 특정 조건을 걸어주고 싶습니다. continue한다던가 아니면 특정 string을 강제로 넣어준다던가 하고 싶습니다.

        어떻게 해야할까요?

        자세히 보기
        최도근
        8월 17일 10:38

        1. try, except를 사용해볼 수 있습니다.
        기본적으로 존재하지 않는 선택자를 검색하면 exception이 발생됩니다.

        2. price.text를 얻어내셔서 내용물을 print로 살펴보세요. 해당 text 내용물을 기준으로 if를 해보실 수 있습니다.

        if로든 try,except로든 어떻게든 상황을 걸러주어야 하고 그 후에 continue하거나 string을 강제하시면 됩니다.

        좋아요 0
          유재원
          8월 18일 01:05

          try, except로 바로 해결했습니다. :) 늘 감사드립니다!

          좋아요 0
            진승연

            week3 Stage 3 마지막에 최종 제출위해서 파일 저장할때

            submit=pd.DataFrame({'PassengerId': df_test['PassengerId'], 'Survived': prediction}) 

            submit.to_csv('submit.csv', index=False)  


            왜 이렇게 오류가 나는건가요?


            자세히 보기
            이헌영
            7월 5일 17:58
            ValueError: array length 891 does not match index length418

            이라는 에러가 발생한 걸 볼 수 있는데요, 생성하려는 df(표)의 크기가 서로 맞지 않을때 이런 에러가 발생합니다.

            승연님 케이스에서는 PassengerId와 prediction의 행의 길이가 맞지 않는 것 같아요!!

            타이타닉 케이스에서 train 데이터는 891개, test 데이터는 418개인데,  둘 중에 하나가 train데이터의 값을 가지고 있어서 에러가 발생한 것으로 보이는데 위 쪽 코드를 한번 확인해보세요!!


            prediction = forest.predict(x_train)

            이렇게 되어있을 수도 있습니다 :)

            좋아요 0
              석민제
              6월 29일 12:25 · 석민제의 팀 크롤링

              예전에 작성해놓은 정적페이지 크롤링 코드인데 다시 실행해보니 오류가 뜹니다! 다른 컴퓨터에서 같은 코드로 실행했을 때는 문제가 없어서 코드 문제는 아닌 거 같은데 어떤 부분이 잘못 됐을까요?ㅜㅡㅜ (beautifulsoup4 설치 되어있는 상태입니다!)

              ------------------------------------

              import requests 

              from bs4 import BeautifulSoup 

              import openpyxl wb = openpyxl.Workbook() 


              sheet = wb.active 

              for page in range (1, 30,10): 

              keyword = '미세먼지' 

              url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query=" + keyword + "&start=" + str(page) 

              raw = requests.get(url, headers={'User-Agent' : 'Mozilla/5.0'}) html = BeautifulSoup(raw.text, "html.parser") 

              infos = html.select('ul.type01 > li') 

               for info in infos: 

               title = info.select_one('a._sp_each_title').text 

               press = info.select_one('ul.type01 > li a._sp_each_url').text 

               print(title, press) 

               sheet.append([title, press]) 


               wb.save('네이버기사_크롤링_'+keyword+'.xlsx')

              자세히 보기
              최도근
              7월 2일 10:52

              일단 코드는 저도 실행이 잘 되네요.

              BeautifoulSoup4를 제대로 설치했는지 확인해주세요.
              (BeautifoulSoup과 BeautifoulSoup4 모두 있어서 설치시 헷갈릴 수 있습니다)

              좋아요 0

                카카오기술블로그 불러올때, 

                기술태그가 아래의 그림같이 긁어지면 어떻게 구분할 수 있는지 궁금합니다! 

                이헌영
                6월 11일 15:55

                주연님 과제 너무 잘해주셨습니다 👍

                먼저 의도한대로 과제는 너무 잘해주셨어요!!!!
                질문 하신 것처럼 태그를 각각 따로 저장하려면 두가지 단계가 필요한데요. 이는 심화과정이므로 참고해서 알고계시면 좋을 것 같아요!!

                1. 더 자세한 선택자를 사용합니다.

                현재 선택자는 정보(기술태그)를 모두 포함하고 있는 큰 태그를 선택하고 있습니다. 더 자세한 선택자를 활용해서 모든 태그를 수집합니다.

                ptags = kblog.select("p.post-tags a")

                2. 리스트의 덧셈 연산을 활용합니다. (심화)

                문자열을 더하면 두 문자가 합쳐진 것 처럼 리스트를 더하면 두 리스트가 합쳐집니다. 이를 활용하여 태그를 수집할 수 있습니다.

                심화1) 수집한 리스트는 요소(소스코드)의 리스트이므로 텍스트를 저장하는 새로운 리스트를 만들어줍니다.

                        tag_list = []
                        for p in ptags:
                            tag_list.append(p.text)

                심화2) 더하기 연산자를 활용해서 리스트와 리스트를 합쳐줍니다.

                sheet.append([title, excerp] + tag_list)


                좋아요 0
                  이헌영
                  6월 11일 15:55

                  * 전체 코드보기

                  ##기술블로그 검색결과 저장하기
                  #1. 기술블로그에서 선택자 찾아내기
                  #컨테이너: li.post-item.post, 제목: h3.post-title, 요약: p.post-excerpt, 기술태그: p.post-tags > a
                  
                  #2. 찾아낸 선택자를 활용하여 데이터 수집하기
                  
                  import requests
                  from bs4 import BeautifulSoup
                  import openpyxl
                  
                  try:
                      wb = openpyxl.load_Workbook("kakaoblog.xlsx")
                      sheet = wb.active #시트지정
                      print("파일 불러오기 성공")
                  
                  except:
                      wb = openpyxl.Workbook()
                      sheet = wb.active #시트지정
                      sheet.append(["제목", "내용", "키워드"])
                      print("신규파일생성")
                  
                  MAX = 12
                  for n in range(1, MAX):
                      raw = requests.get("http://tech.kakao.com/page/"+str(n), headers={"User-Agent":"Mozilla/5.0"})
                      html = BeautifulSoup(raw.text, "html.parser")
                  
                      kblogs = html.select("li.post-item.post")
                  
                      for kblog in kblogs:
                          title = kblog.select_one("h3.post-title").text.strip()
                          excerp = kblog.select_one("p.post-excerpt").text.strip()
                          ptags = kblog.select("p.post-tags a")
                  
                          tag_list = []
                          for p in ptags:
                              tag_list.append(p.text)
                  
                          print("-"*100)
                          print(title)
                          print(excerp)
                          print(tag_list)
                  
                          sheet.append([title, excerp] + tag_list)
                  
                  wb.save("kakaoblog.xlsx")


                  좋아요 0
                    강주연
                    6월 11일 14:33
                    ##기술블로그 검색결과 저장하기 
                    #1. 기술블로그에서 선택자 찾아내기
                    #컨테이너: li.post-item.post, 제목: h3.post-title, 요약: p.post-excerpt, 기술태그: p.post-tags > a
                    
                    #2. 찾아낸 선택자를 활용하여 데이터 수집하기
                    
                    import requests
                    from bs4 import BeautifulSoup
                    import openpyxl
                    
                    try:
                        wb = openpyxl.load_Workbook("kakaoblog.xlsx")
                        sheet = wb.active #시트지정
                        print("파일 불러오기 성공")
                    
                    except:
                        wb = openpyxl.Workbook()
                        sheet = wb.active #시트지정
                        sheet.append(["제목", "내용", "키워드"])
                        print("신규파일생성")
                    
                    MAX = 12
                    for n in range(1, MAX):
                        raw = requests.get("http://tech.kakao.com/page/"+str(n), headers={"User-Agent":"Mozilla/5.0"})
                        html = BeautifulSoup(raw.text, "html.parser")
                    
                        kblogs = html.select("li.post-item.post")
                    
                        for kblog in kblogs:
                            title = kblog.select_one("h3.post-title").text.strip()
                            excerp = kblog.select_one("p.post-excerpt").text.strip()
                            ptags = kblog.select_one("p.post-tags").text.strip()
                    
                            print("-"*100)
                            print(title)
                            print(excerp)
                            print(ptags)
                    
                            sheet.append([title, excerp, ptags]) #키워드가 들러붙어서 나옴 구분 필요, 질문한 사항
                    
                    wb.save("kakaoblog.xlsx")
                    


                    좋아요 0
                      댓글 1개 더보기
                      우현수
                      6월 4일 20:00 · 유니브1기 - 유희코

                      셀레니움을 사용하다가 막히는 부분이 있어 질문 드립니다.

                      아래 코드 실행시 한 개만 가져온 후 멈추는데 이유가 뭘까요? ㅜㅜ



                      from bs4 import BeautifulSoup 

                      import requests 

                      from selenium import webdriver

                       from selenium.webdriver.firefox.firefox_binary import FirefoxBinary 

                      import time 

                      from selenium.webdriver.common.by import By


                      binary=FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe') 

                      browser=webdriver.Firefox(executable_path='C:/Program Files/Mozilla Firefox/geckodriver.exe',firefox_binary=binary)


                      url = 'http://www.foodsafetykorea.go.kr/portal/specialinfo/searchInfoProduct.do?menu_grp=MENU_NEW04&menu_no=2815' 

                      browser.get(url)


                      enter_bt = browser.find_element(By.XPATH, '//*[@id="bsn_nm"]') 

                      enter_bt.send_keys('주)비지에프푸드')


                      submit_bt = browser.find_element(By.XPATH, '//*[@id="srchBtn"]') 

                      submit_bt.click() 

                      time.sleep(10)


                      name = browser.find_elements_by_css_selector('tr td.tl a.bssh')

                      for n in name : 

                      n.click() 

                       time.sleep(3) 

                       fr = browser.find_element_by_css_selector('iframe') 

                       browser.switch_to.frame(fr) 

                       box = browser.find_element(By.XPATH,'/html/body/div/section/div[2]/div[2]/table[5]/tbody') 

                       print(box.text) 

                       print() 

                       browser.switch_to_default_content() 

                       x_box = browser.find_element(By.CSS_SELECTOR, '[title=Close]') 

                       x_box.click() 

                      자세히 보기
                      이헌영
                      6월 4일 20:26

                      종종 셀레니움 사용시 다른 엘레멘트에 가려 원하는 버튼을 누를 수 없는 경우가 있습니다. 이때는 버튼을 클릭하는 것이 아니라 버튼 요소를 선택하여 엔터키를 입력하는 방법을 사용할 수 있어요!!

                      아래 코드를 참고하시면 이해하실 수 있을 거에요!!

                      from selenium.webdriver.common.keys import Keys 
                      for n in name :
                          n.send_keys(Keys.ENTER)
                          time.sleep(2)
                          fr = browser.find_element_by_css_selector('iframe')


                      좋아요 0
                        이헌영
                        6월 4일 20:26
                        from bs4 import BeautifulSoup
                        
                        import requests
                        from selenium import webdriver
                        from selenium.webdriver.common.keys import Keys
                        from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
                        
                        import time
                        from selenium.webdriver.common.by import By
                        
                        # binary=FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe')
                        # browser=webdriver.Firefox(executable_path='C:/Program Files/Mozilla Firefox/geckodriver.exe',firefox_binary=binary)
                        browser = webdriver.Chrome("./chromedriver")
                        
                        url = 'http://www.foodsafetykorea.go.kr/portal/specialinfo/searchInfoProduct.do?menu_grp=MENU_NEW04&menu_no=2815'
                        browser.get(url)
                        
                        enter_bt = browser.find_element(By.XPATH, '//*[@id="bsn_nm"]')
                        enter_bt.send_keys('주)비지에프푸드')
                        
                        submit_bt = browser.find_element(By.XPATH, '//*[@id="srchBtn"]')
                        submit_bt.click()
                        time.sleep(6)
                        
                        name = browser.find_elements_by_css_selector('tr td.tl a')
                        
                        for n in name :
                            n.send_keys(Keys.ENTER)
                            time.sleep(2)
                            fr = browser.find_element_by_css_selector('iframe')
                        
                            print(1)
                        
                            browser.switch_to.frame(fr)
                            info = browser.find_element_by_css_selector(
                                "#content-wrap > section > div.list-container > div.fcs_ddt > table:nth-child(12) > tbody")
                            print(info.text)
                            browser.switch_to.default_content()
                            print()
                        
                            browser.find_element_by_css_selector("a.fancybox-item.fancybox-close").click()
                        


                        좋아요 0
                          우현수
                          6월 4일 20:31

                          글쿤요..! 감사합니다 ㅎㅎ

                          좋아요 0
                            정예린
                            6월 1일 14:08 · 유니브1기 - 코랑이

                            1. 데이터사이언스 1주차 과제 중 결혼여부에 대한 가중치 항목을 추가하고 싶은데 이 부분을 어떻게 하는지 어려웠습니다! ( 엑셀 vlookup으로 해결해야만 하나요? 함수 붙여넣기 해도 n/a값만 나왔습니다.)


                            자세히 보기
                            안아림
                            5월 30일 09:46 · 유니브1기 - 슥

                            구글에서 뉴스 크롤링 도중에 title과 source가 크롤링이 안 됩니다. 도움 요청합니다. search:tradewar

                            이헌영
                            5월 30일 16:07

                            아림님 안녕하세요 :) 

                             구글 뉴스 검색결과 페이지를 살펴보았는데요!!  

                            구글 뉴스 검색결과 같은 경우는 검사창에서 볼 수 있는 코드와 실제 소스코드가 다른 경우에 속하기 때문에 Selenium을 활용하셔야합니다 

                            아래 1페이지에 대한 코드를 첨부할테니, 페이지 이동에 신경쓰셔서 데이터 수집 코드를 완성해보세요!!


                            from selenium import webdriver
                            
                            keyword = input("input keyword: ")
                            driver = webdriver.Chrome("./chromedriver")
                            driver.get("https://www.google.com/search?q="+keyword+"&tbm=nws&start=0")
                            
                            articles = driver.find_elements_by_css_selector("div.gG0TJc")
                            for ar in articles:
                                title = ar.find_element_by_css_selector("h3").text
                                source = ar.find_element_by_css_selector("span.xQ82C.e8fRJf").text
                            
                                print(title, source)
                            


                            좋아요 0
                              이지원
                              5월 27일 14:06 · 유니브1기 - 슥

                              from selenium import webdriver 

                              import time 

                              import openpyxl  

                              wb = openpyxl.Workbook() 

                              sheet = wb.active 

                              sheet.append(['Brand'])  

                              driver = webdriver.Chrome("./chromedriver") 

                              time.sleep(5) 

                              driver.get("https://www.mediamarkt.es") 

                              driver.find_element_by_css_selector("form.ms-autosugestions input:nth-of-type(1)").send_keys("TV") 

                              driver.find_element_by_css_selector("#search-autocomplete > form > button > span").click() 

                              time.sleep(2)  

                              stores = driver.find_elements_by_css_selector("div.content") 

                              for store in stores: 

                                lan = store.find_element_by_css_selector("h2 a").text 

                                 sheet.append([lan]) 

                                 print(lan) 

                               wb.save("1.xlsx")


                              크롤링은 되는데 엑셀 파일 생성이 안돼요...!ㅠㅛㅠ

                              도움..........

                              자세히 보기
                              이헌영
                              5월 28일 10:18
                              from selenium import webdriver
                              
                              import time
                              
                              import openpyxl
                              
                              wb = openpyxl.Workbook()
                              
                              sheet = wb.active
                              
                              sheet.append(['Brand'])
                              
                              driver = webdriver.Chrome("./chromedriver")
                              
                              time.sleep(5)
                              
                              driver.get("https://www.mediamarkt.es")
                              
                              driver.find_element_by_css_selector("form.ms-autosugestions input:nth-of-type(1)").send_keys("TV")
                              
                              driver.find_element_by_css_selector("#search-autocomplete > form > button > span").click()
                              
                              time.sleep(2)
                              
                              stores = driver.find_elements_by_css_selector("div.product-wrapper div.content")
                              print(len(stores))
                              for store in stores:
                                  lan = store.find_element_by_css_selector("h2 a").text
                              
                                  sheet.append([lan])
                              
                                  print(lan)
                              
                              
                              wb.save("1.xlsx")

                              지원님 안녕하세요 :)   일단 위처럼 코드를  실행시켰을 때는 정상적으로 작동합니다!  저는 아래처럼 컨테이너를 선택하는 선택자만 변경시켰는데요, 기존에 사용하신  div.content는 원하는 컨테이너 외에 10개의 태그를 더 가지고 있어서 작동 도중에 에러가 발생한 것 같아요!!

                              div.content #30개 선택
                              div.product-wrapper div.content #20개


                              확인해 보시고 다시 한번 질문 주세요  :)

                              좋아요 2
                              이지원
                              5월 30일 13:18

                              오 성공했어요 :)

                              좋아요 1
                              Harry Yoo

                              멘토님 안녕하세요~ BeautifulSoup으로 쿠팡 웹사이트를 크롤링하고 있는데, 저번에 최도근 멘토님께서 설명해주신거랑 비슷한 문제가 나와서 같은 방식으로 해결할려고 했습니다. 

                               근데 이번에는 url을 뽑아내면 "/vp/products/174002005?itemId=496941318&vendorItemId=4263688715" 이런식으로 나옵니다. 

                              사진에 보이는것처럼 링크 위에 마우스를 올리면 제대로된 주소가 나오구요 ㅠㅠ 이럴때는 어떻게 해야하는 건가요???

                              자세히 보기
                              이헌영
                              5월 28일 10:09

                              안녕하세요  :) 수업시간에 다룬내용 중에 하나인데요,

                              해당하는 페이지의 실제 URL은

                              https://www.coupang.com/vp/products/174002005?itemId=496941318&vendorItemId=4263688715

                              입니다.


                              원래 홈페이지 주소: https://www.coupang.com

                              수집한 href 속성: /vp/products/174002005?itemId=496941318&vendorItemId=4263688715


                              수업시간에는

                              url = title.attrs['href']
                              "https://www.coupang.com" + url

                              위와 같은 방식으로 처리했었습니다 :)


                              *알림은 홈페이지에서 확인하실 수 있어요!!

                              좋아요 1
                              최도근
                              5월 28일 16:34

                              스마트폰으로 푸시알림이 가지는 않지만, 우측 상단 알림함에서 확인가능합니다.

                              좋아요 0
                                Harry Yoo
                                5월 27일 13:57

                                추가로 답변이 달리면 알림이 오는건가요?

                                좋아요 1
                                댓글 1개 더보기

                                html 에 있는것을 긁어와서 , local 에 저장한 다음 db에 올리고 난후 뿌려줄 수도 있고 바로 실시간으로 보여줄수도 있겠습니다. 그과정에서 제가 긁어오는 web에 프론트 코드가 바뀌게 된다면 , 따로 코드상에서 예외처리를 해주는겁니까 ?? 그리고 그전에 view를 띄우기전에 긁어오는 페이지에서 바꼈다라는것을 알 수 있는 방법이 있을까요 ?

                                자세히 보기
                                최도근
                                5월 22일 10:38

                                1. < html 긁어오기 -> local 저장 -> db 반영 > 프로세스는 생각하신게 맞습니다. 2. 프론트 코드가 바뀌면 크롤링 코드도 수정해줘야 합니다. (코드상에서 예외처리를 하든지 새로 만들든지) 3. 페이지가 바뀐것을 확인하는 간단한 방법은 다음과 같습니다. 1) 10개 정도의 안정적인 선택자 찾기 2) 10개 중 8개 이상이 찾아지기 않으면 페이지 바뀌었다고 판단 3) 바뀐 페이지에 대해 기록 페이지에 따라서 10개의 선택자를 쓸 것인지 20개의 선택자를 쓸 것인지, 기준을 80%로 잡을것인지 하는 것은 순전히 크롤링 설계자의 목적에 달려있습니다:)

                                좋아요 0
                                  SH
                                  5월 22일 14:19

                                  답변 감사합니다 ^ ^

                                  좋아요 1
                                  석민제

                                  첨부한 이미지에서 노란색 음영 부분만 긁어오려고 하는데 선택자를 #tablefix1 > tbody > tr td 라고 지정했을 때, 선택되는 값이 없습니다ㅠㅠ 어느 부분이 잘못 됐는지 궁금합니다! ---------------- from selenium import webdriver import time import openpyxl driver = webdriver.Chrome('./chromedriver') driver.get('http://www.airkorea.or.kr/web/pmRelay?itemCode=11008&pMENU_NO=109') time.sleep(1) #날짜지정 driver.find_element_by_css_selector('#dateDiv_1 > span a.arrow_left').click() #검색 클릭 search = driver.find_elements_by_css_selector('a.search') search[0].click() time.sleep(3) boxes = driver.find_elements_by_css_selector('#tablefix1 > tbody > tr') box = boxes[0] city = box.find_element_by_css_selector('td').text print(len(city)) print(city)

                                  자세히 보기
                                  최도근
                                  5월 9일 19:43

                                  민제님의 수준이 이제 많이 높아진거 같아요! 한줄만 바꿔보세요. city = box.find_element_by_css_selector('td').get_attribute('innerHTML') .text를 get_attribute으로 대체했습니다. .text는 속도가 빠르지만 데이터가 추출이 안될 경우가 있습니다.(메모리 등 문제) get_attribute은 안에 있는 내용을 반드시 추출합니다.

                                  좋아요 0
                                    석민제
                                    5월 10일 16:20

                                    알려주신대로 하니까 됐어요! 감사합니당ㅎㅎ

                                    좋아요 0

                                      크롤링 관련 질문입니다. 선택자를 지정할때 혹시 엘리먼트에 선언된 스타일 속성으로 선택자를 지정하는 방법이 있을까요? 예를 들어

                                      코알라

                                      코딩

                                      스타일 속성을 이용해서 "코알라" 텍스트를 갖고 있는

                                      태그를 지정해주는 방식이 가능할까요? 가령 div.coala > p(엘리먼트에 스타일 속성이 font-size:20px이 선언된) 라고요. (물론, 예를 든 코드에서는 "코알라"를 추출하는 여러가지 방법이 있겠지만요) 답변부탁드립니다!

                                      자세히 보기
                                      이헌영
                                      5월 1일 15:12

                                      안녕하세요 :) 두가지 방법이 있을 것 같아요!! 1. 조건문 if를 이용하는 경우, p태그를 모두 수집한 후 그 중에 스타일 속성에 "font-size:20px"을 포함하고 있는 데이터만 따로 저장합니다. >> 예시 data = html.select("p") coala = list() for d in data: # 처음 선택한 태그에 해당하는 속성이 있는지 먼저 체크합니다. if "style" in d.attrs: continue # style 속성에 해당하는 값이 포함되어있는지 체크한 후 저장합니다. if "font-size:20px" in d.attrs["style"]: data1.append(d) 2. 선택자 를 이용하는 경우, 해당하는 속성 값을 포함하고 있는 태그를 선택합니다. >> 예시 coala = html.select("p[style*='font-size:20px']")

                                      좋아요 1
                                      최도근
                                      5월 1일 15:54

                                      파이썬 코드가 아니라 선택자에서 모든 것을 해결하고 싶으신건가요?! 위의 이헌영 리더님이 제시해준 1번 방법을 추천드리고, 선택자 보다 강력한 검색기능이 필요하시다면 xpath를 도입하셔야 합니다.

                                      좋아요 0
                                        유재원
                                        5월 2일 21:03

                                        헌영 님, 도근 님 답변감사합니다. 헌영 님이 답변주신 내용 적용해서 성공했습니다! YES!!! xpath도 찾아봤는데 아직 알고 싶지 않네요...늘 감사드립니다~

                                        좋아요 1
                                        너무 고민말고 물어보세요!
                                        kakao 카카오톡 상담
                                        kakao 적성 테스트
                                        부담없이 채팅 상담하세요. 친절한 코알라가 대기중입니다:)