편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.03.24

    파이썬 웹스크래핑 질문 입니다!


    네이버 홈페이지에서 검색창 바로 밑에 있는 메뉴(?)들을 스크래핑 해서 메뉴들의 제목을 출력하려 합니다.

    html 에서 copy -> copy selector 를 통해 메뉴들을 스크래핑 했는데 똑같은 방식으로 적용해도 어떤 메뉴는 스크래핑이 되고 어떤 메뉴는 스크래핑이 안됩니다.

    • 변수 mail, tv는 오류는 안나오지만 값이 None이 나오고
    • 변수 book과 webtoon은 오류 구문 : AttributeError: 'NoneType' object has no attribute 'string'이 나오고 copy selector로는 스크래핑이 안되던 것들이 밑에 코드에 적혀 있는
    • test = vibe.next_sibling.next_sibling을 이용하면 book,
    • test = vibe.next_sibling.next_sibling..next_sibling.next_sibling을 이용하면 webtoon에 접근이 가능하지만

    이런 방식으로 vibe대신에 pay를 넣으면 이번엔 tv가 접근이 안됩니다.

    오류 구문 : AttributeError: 'NoneType' object has no attribute 'next_sibling'이 나옵니다

    질문은

    1. 똑같은 방식으로 접근했는데 왜 어떤 메뉴는 스크래핑이 되고 어떤 메뉴는 스크래핑이 안되는지
    2. 어떻게 코드를 수정해야 각 메뉴들의 제목을 스크래핑 할 수 있는지
    3. 각 오류들의 원인이 사이트에서 값들을 가져오는데 실패를 해서 그런건지, 실패를 했다면 왜 어떤 것은 그냥 None으로 나오고 어떤것은 오류구문이 나오면서 다르게 나오는건지
    import requests
    from bs4 import BeautifulSoup
    
    URL = 'https://www.naver.com/' 
    page = requests.get(URL)
    page.raise_for_status()
    
    
    soup = BeautifulSoup(page.content, 'html.parser')
    
    mail = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(1) > a") #안됨
    
    cafe = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(2) > a")#됨
    blog = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(3) > a")#됨
    knowledge = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(4) > a")#됨
    shop = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(5) > a")#됨
    pay = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(6) > a")#됨
    
    tv = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(7) > a") #안됨
    
    dictionary = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(1) > a") #됨
    news = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(2) > a")#됨
    stock = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(3) > a")#됨
    ground = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(4) > a")#됨
    map_1 = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(5) > a")#됨
    movie = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(6) > a")#됨
    vibe = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(7) > a")#됨
    
    test = vibe.next_sibling.next_sibling  #이렇게 하면 밑에 test가 book이 됨
    
    book = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(8) > a")#안됨
    webtoon = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(9) > a") #안됨
    
    print(webtoon.string) #webtoon 자리에 각 변수들 입력해서 시험해보았습니다
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.03.24

    파이썬 웹스크래핑 질문 입니다!


    네이버 홈페이지에서 검색창 바로 밑에 있는 메뉴(?)들을 스크래핑 해서

    메뉴들의 제목을 출력하려 합니다

    html 에서 copy -> copy selector 를 통해 메뉴들을 스크래핑 했는데

    똑같은 방식으로 적용해도 어떤 메뉴는 스크래핑이 되고 어떤 메뉴는 스크래핑이 안됩니다...

    변수 mail, tv는

    오류는 안나오지만 값이 None이 나오고

    변수 book과 webtoon은

    오류 구문 : AttributeError: 'NoneType' object has no attribute 'string' 이 나오고

    copy selector로는 스크래핑이 안되던 것들이 밑에 코드에 적혀 있는

    test = vibe.next_sibling.next_sibling을 이용하면 book,

    test = vibe.next_sibling.next_sibling..next_sibling.next_sibling을 이용하면

    webtoon에 접근이 가능하지만

    이런 방식으로 vibe대신에 pay를 넣으면 이번엔 tv가 접근이 안됩니다....

    오류 구문 : AttributeError: 'NoneType' object has no attribute 'next_sibling' 이 나옵니다

    질문은

    1. 똑같은 방식으로 접근했는데 왜 어떤 메뉴는 스크래핑이 되고 어떤 메뉴는 스크래핑이 안되는지
    2. 어떻게 코드를 수정해야 각 메뉴들의 제목을 스크래핑 할 수 있는지
    3. 각 오류들의 원인이 사이트에서 값들을 가져오는데 실패를 해서 그런건지, 실패를 했다면 왜 어떤 것은 그냥 None으로 나오고 어떤것은 오류구문이 나오면서 다르게 나오는건지
    import requests
    from bs4 import BeautifulSoup
    
    URL = 'https://www.naver.com/' 
    page = requests.get(URL)
    page.raise_for_status()
    
    
    soup = BeautifulSoup(page.content, 'html.parser')
    
    mail = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(1) > a") #안됨
    
    cafe = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(2) > a")#됨
    blog = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(3) > a")#됨
    knowledge = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(4) > a")#됨
    shop = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(5) > a")#됨
    pay = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(6) > a")#됨
    
    tv = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(7) > a") #안됨
    
    dictionary = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(1) > a") #됨
    news = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(2) > a")#됨
    stock = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(3) > a")#됨
    ground = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(4) > a")#됨
    map_1 = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(5) > a")#됨
    movie = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(6) > a")#됨
    vibe = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(7) > a")#됨
    
    test = vibe.next_sibling.next_sibling  #이렇게 하면 밑에 test가 book이 됨
    
    book = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(8) > a")#안됨
    webtoon = soup.select_one("#NM_FAVORITE > div.group_nav > ul.list_nav.NM_FAVORITE_LIST > li:nth-child(9) > a") #안됨
    
    print(webtoon.string) #webtoon 자리에 각 변수들 입력해서 시험해보았습니다