작성
·
25
0
css select대신 find 함수를 사용해서 이런 식으로 작성했더니, 같은 결과가 나오긴 했지만 너무 비효율적인거 같아서 질문드립니다. 더 깔끔하게 find를 사용해서 가져오는 방법이 있을까요?
from bs4 import BeautifulSoup
import requests
url="https://davelee-fun.github.io/"
res=requests.get(url)
soup=BeautifulSoup(res.content,"html.parser")
all=soup.find("div", "text-center")
items=all.find("span")
ls=[]
for item in items :
ls.append(item.get_text().strip())
print(ls[1]+" "+ls[2]+" "+ls[3])
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 황재완님.
find
함수를 이용한 크롤링 코드에 대해 질문해주셨는데요, 현재 사용하신 코드도 원하는 결과를 출력하는 데 문제는 없지만 더 효율적이고 깔끔한 방법으로 코드를 개선할 수 있습니다.
기본적으로 find
는 특정 태그의 첫 번째 매칭 요소를 반환하고, find_all
은 모든 매칭 요소를 리스트로 반환합니다. 이런 기능을 활용하면, 문자열을 하나하나 추가하지 않고도 원하는 데이터를 쉽게 가져올 수 있습니다. 아래와 같은 방법을 통해 코드의 효율성을 높일 수 있습니다:
from bs4 import BeautifulSoup
import requests
url = "https://davelee-fun.github.io/"
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")
# 전체 div 태그 중 'text-center' 클래스를 가진 첫 번째 요소 선택
text_center_div = soup.find("div", class_="text-center")
# 해당 div 내부의 모든 span 태그 선택
span_items = text_center_div.find_all("span")
# 각 span 태그의 텍스트를 리스트로 저장
ls = [item.get_text().strip() for item in span_items]
# 리스트에서 필요한 정보 출력
print(" ".join(ls[1:4]))
위의 코드에서는 find_all
과 리스트 컴프리헨션을 사용하여 깔끔하게 원하는 내용을 추출하고, join
을 사용해 문자열을 합쳤습니다. 이 방법은 가독성을 높이고 추후 유지보수가 용이한 코드를 작성하는 데에 유용합니다.
비슷한 내용의 질문과 답변을 찾을 수 있는 링크는 다음과 같습니다:
위 링크에서는 select
와 find
사용에 대한 이해도를 높이는 다양한 논의를 다루고 있으니 참고해보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.