파이썬 웹스크래핑 질문 입니다!
조회수 697회
네이버 홈페이지에서 검색창 바로 밑에 있는 메뉴(?)들을 스크래핑 해서 메뉴들의 제목을 출력하려 합니다.
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'
이 나옵니다
질문은
- 똑같은 방식으로 접근했는데 왜 어떤 메뉴는 스크래핑이 되고 어떤 메뉴는 스크래핑이 안되는지
- 어떻게 코드를 수정해야 각 메뉴들의 제목을 스크래핑 할 수 있는지
- 각 오류들의 원인이 사이트에서 값들을 가져오는데 실패를 해서 그런건지, 실패를 했다면 왜 어떤 것은 그냥 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 자리에 각 변수들 입력해서 시험해보았습니다
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력