find와 select 호환 사용에 대하여.
1597
작성한 질문수 1
안녕하세요^^ 먼저 좋은 강의 해주셔서 큰 도움 받고 있는 수강생입니다. 쉽게 설명해주셔서 순식간에 강의를 들으며 여기까지 왔습니다.
강의 내용을 따라해보던 중, 아래와 같은 코드로 설명해주신 부분을 따라하고 있었는데요.
import requests
from bs4 import BeautifulSoup
res=requests.get('https://finance.naver.com/sise/')
soup=BeautifulSoup(res.content, 'html.parser')
data=soup.select('div.rgt > ul.lst_major > li')
for item in data:
print(item.find('a').get_text(),item.find('span').get_text(),item.find('em').get_text())
맨 아랫줄에서 find 대신 select도 되는지 넣어보았는데, find를 모두 select로 바꿔 넣으면 아래와 같은 에러가 뜹니다.
AttributeError: ResultSet object has no attribute 'get_text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
그래서 select를 사용하면 get_text()를 사용할 수 없다는 의미 같아서요. 아래와 같이 다시 작성해보았는데요.
import requests from bs4 import BeautifulSoup res=requests.get('https://finance.naver.com/sise/') soup=BeautifulSoup(res.content, 'html.parser') data=soup.select('div.rgt > ul.lst_major > li') for item in data: data1=item.select('a') print(data1.get_text())
이렇게 해도 같은 에러메세지가 떠서요. 혹시 select 하에 select를 또 사용하는게 잘못된건가요? 또는 제가 select를 잘못 활용하고 있는것인가요? 해당 부분을 강의 다시 들었는데도 잘 모르겠어서 질문 드립니다.
따라하며 배우니 재미있게 잘 왔지만, 응용하려면 아무래도 더 많은 시간 고민하고 공부해야겠다는 생각이 드네요. ^^;
답변 3
1
for item in data: data1=item.select('a') print(data1.get_text())
제가 알기로는 select - select 사용 가능합니다. 다만, jungaapark님께서 작성하신 코드를 보면, data1=item.select('a') 부분에서 select를 사용하셨는데, 이 경우에는 data1이 리스트가 됩니다.
그리고, 리스트가 된 경우에는 get_text()를 사용할 수 없어요.
data1을 for문으로 푸는 코드를 작성하거나 (리스트 전체 출력), select_one을 사용해서 첫번째 값을 뽑는 두가지 방법이 있을 것 같네요.
값 하나 : select_one = find
리스트 : select = find_all
리스트일 때는 for문으로 풀기, 값이 하나만 들어있을 때는 그냥 print로 출력 가능.
이렇게 생각하시면 좋을 것 같습니다.
0
select 후에 바로 select는 사용할 수 없나보네요.. 말씀하신대로 select_one으로 설정하니 실행이 됩니다!
빠른 답변 정말 정말 감사드립니다!
0
안녕하세요~,
선택자 사용을 잘못하신거 같아요.
select 가 아니라 select_one 으로 바꿔주셔요.
첫번째 -----------------
import requests
from bs4 import BeautifulSoup
res=requests.get('https://finance.naver.com/sise/')
soup=BeautifulSoup(res.content, 'html.parser')
data=soup.select('div.rgt > ul.lst_major > li')
for item in data:
print(item.select_one('a').get_text(),item.select_one('span').get_text(),item.select_one('em').get_text())
두번째 ------------------
import requests
from bs4 import BeautifulSoup
res=requests.get('https://finance.naver.com/sise/')
soup=BeautifulSoup(res.content, 'html.parser')
data=soup.select('div.rgt > ul.lst_major > li')
for item in data:
data1=item.select_one('a')
print(data1.get_text())
크롤링, 영상을 따라해도 제미나에게 물어봐도 안되요
0
32
1
정규표현식 및 여러 코드 꼭 외워야 하나요?
0
39
1
리스트 함수형도 정수 데이터 받을 수 있나요?
0
45
1
크롤링 관련 질문
0
63
1
문제 답이 없는 버전은 없나요?
0
74
1
requests, BeautifulSoup 임포트 부분에 대해 문의드립니다.
0
83
1
업데이트 강의
0
97
2
선생님 강의중에서 sqlite3 강의를 제공한 강의가 있나요?
0
123
2
연습용 예제 파일
0
76
1
lxml 관련 오류
0
106
1
SAVE Request 창 띄우는 법
0
92
1
포스트맨 사용법이 바뀌어서 강의를 따라가지 못하겠습니다. 2
0
74
1
포스트맨 사용법이 바뀌어서 강의를 따라가지 못하겠습니다.
0
94
1
예제 2, 4, 6에 대한 풀이 방식 질문.
0
89
1
문제 파일
0
78
1
pdf 파일 내 코드 복붙시 공백
0
291
1
데이터 저장 강좌 문의 건
0
95
1
" " 와 ' '의 차이를 알고 싶습니다
0
242
1
Exercise 22. 문자열 다루기 (strip)
0
131
1
list함수로 리스트 선언하면 실패하는데 이유는 무엇입니까?
0
187
1
셀 삽입후 바로 기입이 가능합니까?
0
139
2
주피터 노트북 마우스 스크롤? 오류
0
1546
2
등호 2개('==')의 의미가 뭐죠?
0
459
2
페이지가 넘어갈 때 url 변하지 않는 경우
0
266
1





