편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.07.31

    웹 크롤링 질문드립니다.


    안녕하세요. 아시겠지만, 홈페이지마다 긁어오는 형식이 다른 웹 크롤링 공부를 하던 도중 카페도 다를가 해서 예제를 찾아보고 다른 카페에 적용하던 도중 오류가 생겨 질문 드립니다. 해당코드는 이렇습니다.

    from selenium import webdriver
    
    from bs4 import BeautifulSoup as bs
    
    import csv
    
    driver = webdriver.Chrome(executable_path = "/Users/GB-OFC-006/Downloads/python/chromedriver.exe")
    
    driver.implicitly_wait(3)
    
    
    total_list = ['말머리', '제목', '내용'] 
    f = open('preg_quest.csv', 'w', encoding = 'ansi', newline='') 
    wr = csv.writer(f)
    wr.writerow([total_list[0], total_list[1], total_list[2]])
    f.close()
    
    
    driver.get('https://nid.naver.com/nidlogin.login')
    
    driver.find_element_by_name('id').send_keys('gustj258')
    
    driver.find_element_by_name('pw').send_keys('****')
    
    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()
    
    time.sleep(15) #자동입력방지 문자는 직접 입력
    
    
    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()
    
    
    
    base_url = 'https://cafe.naver.com/onlysealure/'
    
    
    cnt = 0  # number of collected data
    page = 0 # position of current page
    
    while page < 1000 : # Naver cafe's max page
         page = page + 1
         quest_urls = []
         try :
              # add personal conditions
    
                # &search.menuid = : 게시판 번호(카페마다 상이)
                # &search.page = : 데이터 수집 할 페이지 번호
                # &userDisplay = 50 : 한 페이지에 보여질 게시글 수
              driver.get(base_url + '&search.menuid=392&search.page='+ str(page) +'&userDisplay=50')
              driver.switch_to.frame('cafe_main') #iframe으로 프레임 전환
              quest_list = driver.find_elements_by_css_selector('div.inner_list > a.article') #이 태그 부분 카페마다 다르다던데....
              quest_urls = [ i.get_attribute('href') for i in quest_list ]
              print(len(quest_urls))
    
              for quest in quest_urls :
                   try : #게시글이 삭제되었을 경우가 있기 때문에 try-exception
                        driver.get(quest)
                        driver.switch_to.frame('cafe_main')
                        soup = bs(driver.page_source, 'html.parser')         
                        #제목 추출
                        title = soup.select('div.tit-box span.b')[0].get_text()
                        #내용 추출
                        content_tags = soup.select('#tbody')[0].select('p')
                        content = ' '.join([ tags.get_text() for tags in content_tags ])
                        #말머리 추출
                        try : # 말머리 없는 글도 있으니까
                            tag = soup.select('div.tit-box span.head')[0].get_text()
                            temp_list = [tag, title, content]
                            f = open('preg_quest.csv', 'a+', encoding = 'ansi', newline='')
                            wr = csv.writer(f)
                            wr.writerow(temp_list)
                            f.close()
                            cnt = cnt + 1
                        except : # 말머리 없으면 next
                             pass
                   except : # chrome alert창 처리해줌
                        driver.switch_to_alert.accpet()
                        driver.switch_to_alert
                        driver.switch_to_alert.accpet()
         except :
              pass
         print([page, cnt]) #page로는 진행상황을 알 수 있고 cnt로는 몇개의 데이터를 모았는지 알 수 있음
    

    원본은 임산부 카페였고, 바다낚시 카페를 적용해서 해봤더니

    데이터는 입력안되고 빈공간으로 출력되더라구요 ㅠㅠ
    왜그런지 알수 있을까요??
    

    도와주세요 코딩 고수여러분!!

    출처: https://sueaty.tistory.com/36 상업적으로는 절대 사용하지 않습니다.

  • 프로필 nowp님의 편집
    날짜2020.07.28

    웹 크롤링 질문드립니다.


    안녕하세요. 아시겠지만, 홈페이지마다 긁어오는 형식이 다른 웹 크롤링 공부를 하던 도중 카페도 다를가 해서 예제를 찾아보고 다른 카페에 적용하던 도중 오류가 생겨 질문 드립니다. 해당코드는 이렇습니다.

    from selenium import webdriver
    
    from bs4 import BeautifulSoup as bs
    
    import csv
    
    driver = webdriver.Chrome(executable_path = "/Users/GB-OFC-006/Downloads/python/chromedriver.exe")
    
    driver.implicitly_wait(3)
    
    
    total_list = ['말머리', '제목', '내용'] 
    f = open('preg_quest.csv', 'w', encoding = 'ansi', newline='') 
    wr = csv.writer(f)
    wr.writerow([total_list[0], total_list[1], total_list[2]])
    f.close()
    
    
    driver.get('https://nid.naver.com/nidlogin.login')
    
    driver.find_element_by_name('id').send_keys('gustj258')
    
    driver.find_element_by_name('pw').send_keys('****')
    
    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()
    
    time.sleep(15) #자동입력방지 문자는 직접 입력
    
    
    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()
    
    
    
    base_url = 'https://cafe.naver.com/onlysealure/'
    
    
    cnt = 0  # number of collected data
    page = 0 # position of current page
    
    while page < 1000 : # Naver cafe's max page
         page = page + 1
         quest_urls = []
         try :
              # add personal conditions
    
                # &search.menuid = : 게시판 번호(카페마다 상이)
                # &search.page = : 데이터 수집 할 페이지 번호
                # &userDisplay = 50 : 한 페이지에 보여질 게시글 수
              driver.get(base_url + '&search.menuid=392&search.page='+ str(page) +'&userDisplay=50')
              driver.switch_to.frame('cafe_main') #iframe으로 프레임 전환
              quest_list = driver.find_elements_by_css_selector('div.inner_list > a.article') #이 태그 부분 카페마다 다르다던데....
              quest_urls = [ i.get_attribute('href') for i in quest_list ]
              print(len(quest_urls))
    
              for quest in quest_urls :
                   try : #게시글이 삭제되었을 경우가 있기 때문에 try-exception
                        driver.get(quest)
                        driver.switch_to.frame('cafe_main')
                        soup = bs(driver.page_source, 'html.parser')         
                        #제목 추출
                        title = soup.select('div.tit-box span.b')[0].get_text()
                        #내용 추출
                        content_tags = soup.select('#tbody')[0].select('p')
                        content = ' '.join([ tags.get_text() for tags in content_tags ])
                        #말머리 추출
                        try : # 말머리 없는 글도 있으니까
                            tag = soup.select('div.tit-box span.head')[0].get_text()
                            temp_list = [tag, title, content]
                            f = open('preg_quest.csv', 'a+', encoding = 'ansi', newline='')
                            wr = csv.writer(f)
                            wr.writerow(temp_list)
                            f.close()
                            cnt = cnt + 1
                        except : # 말머리 없으면 next
                             pass
                   except : # chrome alert창 처리해줌
                        driver.switch_to_alert.accpet()
                        driver.switch_to_alert
                        driver.switch_to_alert.accpet()
         except :
              pass
         print([page, cnt]) #page로는 진행상황을 알 수 있고 cnt로는 몇개의 데이터를 모았는지 알 수 있음
    

    원본은 임산부 카페였고, 바다낚시 카페를 적용해서 해봤더니

    NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#frmNIDLogin > fieldset > input"}
      (Session info: chrome=84.0.4147.89)
    

    이런 오류가 뜨더라구여.. 구글링해서 해결해봐도 안되서 이렇게 질문드립니다. 도와주세요 코딩 고수여러분!!

    출처: https://sueaty.tistory.com/36 상업적으로는 절대 사용하지 않습니다.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.07.28

    웹 크롤링 질문드립니다.


    안녕하세요. 아시겠지만, 홈페이지마다 긁어오는 형식이 다른 웹 크롤링 공부를 하던 도중 카페도 다를가 해서 예제를 찾아보고 다른 카페에 적용하던 도중 오류가 생겨 질문 드립니다. 해당코드는 이렇습니다.

    from selenium import webdriver

    from bs4 import BeautifulSoup as bs

    import csv

    driver = webdriver.Chrome(executable_path = "/Users/GB-OFC-006/Downloads/python/chromedriver.exe")

    driver.implicitly_wait(3)

    total_list = ['말머리', '제목', '내용'] f = open('preg_quest.csv', 'w', encoding = 'ansi', newline='') wr = csv.writer(f) wr.writerow([total_list[0], total_list[1], total_list[2]]) f.close()

    driver.get('https://nid.naver.com/nidlogin.login')

    driver.find_element_by_name('id').send_keys('gustj258')

    driver.find_element_by_name('pw').send_keys('****')

    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()

    time.sleep(15) #자동입력방지 문자는 직접 입력

    driver.find_element_by_css_selector('#frmNIDLogin > fieldset > input').click()

    base_url = 'https://cafe.naver.com/onlysealure/'

    cnt = 0 # number of collected data page = 0 # position of current page

    while page < 1000 : # Naver cafe's max page page = page + 1 quest_urls = [] try : # add personal conditions

            # &search.menuid = : 게시판 번호(카페마다 상이)
            # &search.page = : 데이터 수집 할 페이지 번호
            # &userDisplay = 50 : 한 페이지에 보여질 게시글 수
          driver.get(base_url + '&search.menuid=392&search.page='+ str(page) +'&userDisplay=50')
          driver.switch_to.frame('cafe_main') #iframe으로 프레임 전환
          quest_list = driver.find_elements_by_css_selector('div.inner_list > a.article') #이 태그 부분 카페마다 다르다던데....
          quest_urls = [ i.get_attribute('href') for i in quest_list ]
          print(len(quest_urls))
    
          for quest in quest_urls :
               try : #게시글이 삭제되었을 경우가 있기 때문에 try-exception
                    driver.get(quest)
                    driver.switch_to.frame('cafe_main')
                    soup = bs(driver.page_source, 'html.parser')         
                    #제목 추출
                    title = soup.select('div.tit-box span.b')[0].get_text()
                    #내용 추출
                    content_tags = soup.select('#tbody')[0].select('p')
                    content = ' '.join([ tags.get_text() for tags in content_tags ])
                    #말머리 추출
                    try : # 말머리 없는 글도 있으니까
                        tag = soup.select('div.tit-box span.head')[0].get_text()
                        temp_list = [tag, title, content]
                        f = open('preg_quest.csv', 'a+', encoding = 'ansi', newline='')
                        wr = csv.writer(f)
                        wr.writerow(temp_list)
                        f.close()
                        cnt = cnt + 1
                    except : # 말머리 없으면 next
                         pass
               except : # chrome alert창 처리해줌
                    driver.switch_to_alert.accpet()
                    driver.switch_to_alert
                    driver.switch_to_alert.accpet()
     except :
          pass
     print([page, cnt]) #page로는 진행상황을 알 수 있고 cnt로는 몇개의 데이터를 모았는지 알 수 있음
    

    원본은 임산부 카페였고, 바다낚시 카페를 적용해서 해봤더니

    NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#frmNIDLogin > fieldset > input"} (Session info: chrome=84.0.4147.89)

    이런 오류가 뜨더라구여.. 구글링해서 해결해봐도 안되서 이렇게 질문드립니다. 도와주세요 코딩 고수여러분!!

    출처: https://sueaty.tistory.com/36 상업적으로는 절대 사용하지 않습니다.