작성
·
231
0
안녕하세요.
우선 양질의 컨텐츠를 제공해주신 강사님께 감사의 말씀 올립니다.
1. 목적 : 게시판(https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page=1)의 제목을 크롤링한다.
2. 작성코드
import requests
from bs4 import BeautifulSoup
for index in range(1, 4):
res = requests.get('https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page='+ str(index))
soup = BeautifulSoup(res.content, "html.parser")
data = soup.select('#fboardlist > div.list-board > ul > li > div.wr-subject > a')
for item in data:
print(item.get_text().split('\t')[5])
위와 같이 작성하면 원하는 답을 도출할 수 있었습니다. 여기서 질문드립니다.
3. 질문
수정코드 : data = soup.select('#fboardlist > div.list-board > ul > *****li:nth-child(1) > div.wr-subject > a')
게시판의 1개의 제목만 출력하기위해 위와 같이 수정하고 item.get_text() 하면 아래와 같이 나옵니다.
1 탄소 발자국을 줄이는 나이키 신발 1
위와 같이 데이터가 출력되기에 탭키로 스플릿해서 출력했습니다. 결국 원하는 데이터가 도출되기는 하였으나 왠지 좀 불안해보이고 전문성이 떨어져 보입니다.
아래는 해당 제목의 엘러먼트 입니다.
<a href="https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&wr_id=745898" class="item-subject"> <span class="orangered visible-xs pull-right wr-comment"> <i class="fa fa-comment lightgray"></i> <b>1</b> </span> <san class="wr-icon wr-image"></span> 탄소 발자국을 줄이는 나이키 신발 <span class="count orangered hidden-xs">1</span> </a>
엘러먼트 값 중 a태그 안의 구성은 ①텍스트가 없는 태그, ②불필요한 텍스트가 작성된 태그, ③원하는 결과 값을 가지고 있는 텍스트
등으로 나눠볼 수 있으며 이를 분별하는 방법에 대한 문의 입니다.
①과 ②, ③은 get_text로 분리할 수 있지만 ②와 ③은 어떻게 분리할지 잘 모르겠습니다. 아무리 머리를 쥐어짜도 스플릿외에는 생각이 나지 않습니다.
하위 디렉토리(태그)를 제거하여 추출하거나 동일 디렉토리의 특정태그만 분별 or 태그가 없는 택스트만 분별하는 방법이 있는지요?
감사합니다.
답변 2
1
안녕하세요. 양질의 컨텐츠라고 말씀해주셔서 정말 감사합니다.
내용이 많기도 하고, 1,2,3을 분리할 수 있는데, 2와 3은 어떻게 분리할 수 있는지 모르겠다는 이야기가 무슨 이야기인지 정확히는 잘 모르겠습니다.
①과 ②, ③은 get_text로 분리할 수 있지만 ②와 ③은 어떻게 분리할지 잘 모르겠습니다.
아마도 <b>1</b> 를 빼고, '탄소 발자국을 줄이는 나이키 신발' 텍스트만 추출하는 방법을 물으신 것 같습니다.
이 경우는 '탄소 발자국을 줄이는 나이키 신발' 텍스트만 감싸고 있는 태그가 없기 때문에, 부득이 <b>1</b>까지 추출하실 수밖에 없습니다. 이후에 불필요한 텍스트를 파이썬 스트링 함수(split, strip), 그리고 좀더 나아간다면 파이썬 정규표현식 라이브러리 (re) 를 통해, 삭제해주는 방식으로 작업을 합니다.
사유는 크롤링 라이브러리는 태그를 기준으로 원하는 텍스트를 추출하는 것인데, 불필요한 텍스트와 원하는 텍스트가 하나의 태그로 감싸져있다면, 이를 분리하기 위해 선택할 방법이 없기 때문입니다.
불필요한 텍스트를 파이썬 스트링 함수(split, strip), 그리고 좀더 나아간다면 파이썬 정규표현식 라이브러리 (re) 를 통해, 삭제해주는 방식으로 작업을 하는 것은 전문적인 것이고, 더 전문적으로 하려면, 크롤링 라이브러리 없이 이런 함수만으로도 내가 원하는 텍스트를 전체 html 파일에서 추출할 수 있는 것이라서, 이 부분은 걱정하지 않으셔도 좋을 것 같습니다. 이런 파이썬 함수나 정규표현식을 더 많이 써보시면 더 발전하실 것입니다. 감사합니다.
0
<b>1</b> 를 빼고, '탄소 발자국을 줄이는 나이키 신발' 텍스트만 추출하는 방법을 문의한 것이 맞습니다.
re 라이브러리(정규표현식)는 구글링 해보니 다양한 예제가 나오네요!!
위에 언급한 html 파일에서 추출하는 것에 대해 궁금해서 추가 질문드립니다.
강사님의 다른 강좌들을 보니 해당강좌 이후의 크롤링 강좌들이 있는것으로 확인 됩니다. 혹시 다른 강좌에서 해당 기술에 대한 내용이 포함되어있는 강의가 있나요? 있다면 어떤 강의인지 알려주세요.
없다면.... 조금이라도 공부해보게 구글링 검색키워드라도 알려주시면 좋겠습니다.
감사합니다.