24.07.25 19:39 작성
·
41
·
수정됨
0
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)
- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다
- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다
- 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
res = urlopen('https://davelee-fun.github.io/blog/crawl_test_css.html')
soup = BeautifulSoup(res, "html.parser")
data = soup.select('ul#dev_course_list li.course')
for item in data:
print (item.get_text())
여기에서
data = soup.select('ul#dev_course_list li.course')
이부분을
data = soup.select_one('ul#dev_course_list')
data1=soup.select('li.course')
이렇게 나누는 거랑 뭐가 다른가요?
값은 같게 나오길래 궁금해서 여쭤봅니다,
항상 감사합니다!
답변 1
0
2024. 07. 27. 11:03
안녕하세요. 답변 도우미입니다.
질문해주신 코드에서 soup.select
와 soup.select_one
의 차이점 및 data
를 분리하는 방법에 대해 설명드리겠습니다.
### 기존 코드:
```python
data = soup.select('ul#dev_course_list li.course')
```
이 코드는 CSS 선택자를 사용하여 ul
태그 중 id
가 dev_course_list
인 요소의 자식 요소 중 클래스가 course
인 모든 li
태그를 선택합니다. data
에는 조건에 맞는 모든 li
태그가 리스트 형태로 저장됩니다.
### 수정된 코드:
```python
data = soup.select_one('ul#dev_course_list')
data1 = soup.select('li.course')
```
이 코드는 두 가지로 나눌 수 있습니다.
1. data = soup.select_one('ul#dev_course_list')
:
- 이 부분은 CSS 선택자를 사용하여 ul
태그 중 id
가 dev_course_list
인 요소를 선택합니다.
- select_one
메서드는 조건에 맞는 첫 번째 요소를 반환하며, data
에는 해당 ul
요소가 저장됩니다.
2. data1 = soup.select('li.course')
:
- 이 부분은 CSS 선택자를 사용하여 클래스가 course
인 모든 li
태그를 선택합니다.
- select
메서드는 조건에 맞는 모든 요소를 리스트 형태로 반환하며, data1
에는 모든 li.course
요소가 저장됩니다.
### 차이점:
1. 선택 요소의 범위:
- soup.select('ul#dev_course_list li.course')
는 특정 ul
요소의 자식 li.course
요소들만 선택합니다.
- soup.select('li.course')
는 문서 내의 모든 li.course
요소를 선택합니다.
2. 필터링 범위:
- select('ul#dev_course_list li.course')
는 부모 요소(`ul#dev_course_list`)와 자식 요소(`li.course`)를 동시에 고려하여 필터링합니다.
- select_one('ul#dev_course_list')
와 select('li.course')
는 각각 별도로 필터링하기 때문에, li.course
가 다른 ul
요소에도 포함될 수 있습니다.
### 예시로 결과 비교:
문서 구조가 아래와 같을 때,
```html
<ul id="dev_course_list">
<li class="course">Course 1</li>
<li class="course">Course 2</li>
</ul>
<ul id="other_list">
<li class="course">Course 3</li>
</ul>
```
1. soup.select('ul#dev_course_list li.course')
:
- 결과: ['Course 1', 'Course 2']
2. soup.select_one('ul#dev_course_list')
와 soup.select('li.course')
:
- soup.select_one('ul#dev_course_list')
: ul#dev_course_list
요소를 선택
- soup.select('li.course')
: 문서 내의 모든 li.course
요소를 선택
- 결과: ['Course 1', 'Course 2', 'Course 3']
따라서, 두 방법은 선택하는 요소의 범위와 필터링 조건이 다릅니다. 주어진 문서 내에서 원하는 요소를 정확히 선택하려면 첫 번째 방법을 사용하는 것이 더 적절할 수 있습니다.
감사합니다.
잔재미코딩 드림