작성
·
113
0
영상과 답안지를 보면
featured 를 가져오기 위해서
featured = soup.select_one('section.featured-post') 를 추가하는 작업이 있는데요...
import requests
from bs4 import BeautifulSoup
url = 'https://davelee-fun.github.io/'
res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('section.featured-posts h4.card-text')
for item in items:
print (item.get_text().strip())
이렇게 하는 방법으로도 동일한 결과값이 나오긴 하는 데
이렇게 하는 방법에 추후 문제나 단점이 있을까요??
답변 1
0
안녕하세요. 답변 도우미입니다.
우선 둘 중의 원하시는 바를 쓰셔도 둘 다 괜찮습니다. 다만, 보다 구체적인 답변이 필요하시다면, 다음 내용을 참고해보시면 좋을 것 같습니다.
설명해주신 코드는 웹 페이지에서 특정 데이터를 스크래핑하는 과정을 보여주고 있습니다. soup.select_one('section.featured-post')
와 soup.select('section.featured-posts h4.card-text')
를 사용하여 정보를 추출하는 방식이 다르긴 하지만, 두 방식 모두 유효하며 상황에 따라 선택할 수 있습니다. 각 방법의 차이와 잠재적인 문제점에 대해 살펴보겠습니다.
### 1. soup.select_one('section.featured-post')
사용
- 장점: select_one
메소드는 CSS 선택자에 해당하는 첫 번째 요소만을 반환합니다. 따라서 특정 섹션의 정보를 정확히 타깃팅하여 추출할 때 유용합니다.
- 단점: 만약 여러 개의 요소가 필요하거나 동적으로 변하는 내용이라면, 이 메소드만으로는 충분한 정보를 수집하기 어려울 수 있습니다.
### 2. soup.select('section.featured-posts h4.card-text')
사용
- 장점: select
메소드는 지정한 CSS 선택자에 매칭되는 모든 요소를 리스트 형태로 반환합니다. 따라서 여러 데이터를 한 번에 수집할 때 효과적입니다.
- 단점: 반환된 리스트를 추가적으로 처리해야 할 필요가 있으며, 원하지 않는 데이터도 포함될 수 있습니다. 또한, CSS 선택자가 더 구체적이기 때문에 페이지 구조에 따라서는 미세 조정이 필요할 수 있습니다.
### 잠재적 문제나 단점
- 유지보수성: 웹 페이지의 구조가 변경되면 CSS 선택자도 그에 맞게 수정해야 합니다. 특히, soup.select
에서 사용한 section.featured-posts h4.card-text
와 같은 구체적인 선택자는 더 취약할 수 있습니다. 페이지의 레이아웃이 변경될 경우, 이 선택자는 더 이상 유효하지 않을 수 있습니다.
- 효율성: 반환된 요소의 수가 많을 경우, 불필요한 처리 시간이 추가될 수 있으며 메모리 사용량도 증가할 수 있습니다.
- 오류 처리: 서버에서 응답이 없거나 페이지 구조가 예상과 다를 경우를 대비한 오류 처리 로직이 충분하지 않을 수 있습니다.
따라서, 웹 스크래핑을 할 때는 가능한 한 목표에 맞게 선택자를 정확히 설정하고, 웹 페이지의 구조 변경에 대응할 수 있도록 코드를 유연하게 작성하는 것이 중요합니다. 또한, 주기적으로 코드가 제대로 작동하는지 확인하고, 필요한 경우 수정하는 것이 좋습니다.
감사합니다.