작성
·
318
0
selector를 최대한 strict하게 주어도 selector의 중복으로 제가 원하는 데이터만 추출이 여렵습니다
제가 원하는건 여기서 '(왕초보) - 클래스 소개' 데이터만 가져오는 것인데 어떻게 하나요?
items가 리스트 형식으로 저장되니 반복문을 쓰지 않고 바로 인덱스 값을 주어서 추출하긴 했는데
이 방법 말고 첫번째 사진, items를 반복문으로 출력한 item에서 '(왕초보) - 클래스 소개'를 추출하는 방법이 있을까요?
++++++++++++++++++++++++)
추가로 태그 안에 있는 텍스트를 출력할 때 .get_text()와 .string이 같다고 하셨는데 그냥 .text해도 똑같이 출력 되더라구요
같은건가요???????????????
답변 4
1
아 지금 강의 들으니 select()로 추출하면 좀 더 깔끔하네요.
1. index로 검색
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('ul#hobby_course_list li')
for index, item in enumerate(items):
if index == 0: # 원하는 index를 주면 됨.
print(item.get_text())
2. 원하는 단어로 검색
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('ul#hobby_course_list li')
for item in items:
words = item.get_text().split('-')[1].split()
for word in words:
if word == "클래스": # 원하는 문자를 주면 됨.
print(item.get_text())
그리고, 그냥 첫번째를 원하시는 거면, 다음 강의에 나오는 select_one 을 사용하시면 되네요. ^^
강사님 이 글 보실지 모르지만, 강의 감사합니다. 꾸벅
1
저도 공부삼아 두 가지 방법으로 접근해 봤는데요.
1. 몇 번째 것을 뽑고 싶다. index 번호가 일치하는 것 추출
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')
ulSoup = soup.find('ul', id='hobby_course_list')
titles = ulSoup.find_all('li', 'course')
for index, title in enumerate(titles):
if index == 0: # 원하는 index를 주면 됨.
print(title.get_text())
2. 원하는 단어를 추출
첫번째 for문에서 단어를 분리하고, 단어리스트를 가지고 for문을 한번 더 돌려서 내가 원하는 단어가 있는지 비교
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')
ulSoup = soup.find('ul', id='hobby_course_list')
titles = ulSoup.find_all('li', 'course')
for title in titles:
words = title.get_text().split('-')[1].split()
for word in words:
if word == "클래스": # 원하는 문자를 주면 됨.
print(title.get_text())
아직 배우는 중이라 더 좋은 방법이 있을 것 같은데...
일단, 지금까지 강사님께 배운 내용을 토대로 제가 아는 범위내에서 풀어봤습니다.
0
@강호성님
추출조건이 특정 keyword가 들어간 문자열이 아니라 정해진 위치라면..
인터넷을 뒤져보니 처음 질문하셨던 방법대로 리스트의 몇 번째로 바로 접근하시는 것이 좋지 싶네요.
구글링하다보니 몇 번째 요소에 접근하는 nth-of-type이란 것도 있네요. 덕분에 많이 공부했네요.
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')
item = (soup.select_one('ul#hobby_course_list li:nth-of-type(4)'))
print(item.get_text())
0
답변 감사합니다 ^ㅁ^
맨 첫번째인 '(왕초보) - 클래스 소개'를 추출 하는거면 select_one으로 가능한데
4번째인 '(왕초보) - 초간단 페이지 만들어보기'를 원하면 어떻게 하나요?
답변을 기반으로 생각해보면 원하는 단어로 추출이 좋아보이긴 하는데 더 좋은 방법이 있나해서요
아무튼 제가 몰랐던 enumerate method도 알아가고 많은 도움이 됐습니다 감사합니다!!