20.11.25 16:42 작성
·
1.4K
0
안녕하세요^^ 먼저 좋은 강의 해주셔서 큰 도움 받고 있는 수강생입니다. 쉽게 설명해주셔서 순식간에 강의를 들으며 여기까지 왔습니다.
강의 내용을 따라해보던 중, 아래와 같은 코드로 설명해주신 부분을 따라하고 있었는데요.
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
2020. 11. 26. 16:22
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())