안녕하세요 Davey 입니다. 오늘 주요 다룰 내용은 re 정규 표현식을 이용하여 크롤링 할 때 사용하는 조건 속성 값을 정의하는 내용입니다. 기존에는 머리 문자와 끝 문자를 이용해서 조건 속성 값을 정의하는 것도 설명은 드렸습니다.
오늘 내용은 비슷하지만, 사용한 패키지가 re 정규 표현식 패키지를 이용한다라고 이해하시면 됩니다. re에 관한 포스팅 및 크롤링 조건 속성 값 정의 관련 포스팅을 을 먼저 보고 오시면, 더 이해하는데 도움이 되실 듯합니다. 아래 Link 참조 하세요.
re정규 표현식을 이용ㅎ여, 조건 속성값 정의하는 코드 구현
: 기존에 포스팅 올린 웹페이지 분석 및 크롤링 관련 포스팅에 기재된 내용을 기본으로 코드를 구현하도록 하겠습니다. 조건 속성 값에 re 정규 표현식을 썼다는 것만 큰 차이이고, 다른 것은 크게 차이 나는 것은 없습니다. 그럼 아래 코드와 관련 설명 참조하시면 됩니다.
==================================================================================
# requests, BeautifulSoup, re 라이브러리가 필요하므로 선언함.
import requests
from bs4 import BeautifulSoup
import re
# 희망하는 URL을 변수에 집어 넣고, 연결시키기
Targeted_URL = 'https://www.asiae.co.kr/article/2020101001220363691'
Requested01 = requests.get(Targeted_URL)
# BeautifulSoup을 이용하여, 파싱(parsing)하기
test_1 = BeautifulSoup(Requested01.text, 'html.parser')
# re 정규 표현식을 이용하여, id 및 class 속성 값 입력 그리고 그에 맞는 Data 추출하기
# "h" 로 시작하는 모든 Tag 의 Data를 추출하는 코드 구현, "\d" 모든 숫자를 나타내는 입력 속성 값
result01_class01 = test_1.find_all(re.compile('h\d'))
# result01_class01의 값을 출력하는 print 함수 사용
print(result01_class01)
==================================================================================
- 위 코드를 실행을 해보면, 아래와 같이 <h>로 시작하는 모든 Tag의 Data 값이 출력되는 걸 확인 하실 수 있습니다.
- 이 출력한 Data에서 첫 번째 <h> 태그의 내용을 출력하려면 아래와 같이 코드를 수정하면 됩니다. 여기에서 추가적으로 설명을 드리면, 출력되는 Form이 List Form이기 때문에, "[]" 를 이용하여, 원하는 순번의 Data를 출력하실 수 있습니다.
==================================================================================
# List 순번의 Data를 출력할 수 있게
print(result01_class01[0])
==================================================================================
- 위 코드를 실행 시키면 아래와 같이 한 가지 값만 출력되는 것을 확인 하실 수 있습니다.
- 그럼 머리 글자와 끝 글자를 이용하여 출력하는 방법을, re 정규 표현식을 이용하여, 출력해보도록 하겠습니다.
1) 머리 글자를 이용하여, 출력하는 re 정규 표현식
: ["^원하는 앞글자+." ] 패턴으로 구성하여, 조건 속성 값을 입력 할 수가 있습니다. 쉬운 이해를 돕기 위해서 아래와 같이 예제를 준비하였습니다.
==================================================================================
# <div> 태그 중에 class 값이 "r" 로 시작하는 모든 Data를 출력하는 코드 구현
result01_class02 = test_1.find_all('div', class_ = re.compile('^r+.'))
# result01_class02 입력된 값을 출력하는 함수
print(result01_class02)
==================================================================================
2) 끝 글자를 이용하여, 출력하는 re 정규 표현식
: [".+원하는 글자$" ] 패턴으로 구성하여, 조건 속성 값을 입력 할 수가 있습니다. 쉬운 이해를 돕기 위해서 아래와 같이 예제를 준비하였습니다.
==================================================================================
# <div> 태그 중에 class 값이 "news"로 끝나는 모든 Data를 출력하는 코드 구현
result01_class03 = test_1.find_all('div', class_ = re.compile('.+news$'))
# result01_class03 입력된 값을 출력하는 함수
print(result01_class03)
==================================================================================
- 위 코드를 실행시켜 보면, 아래와 같이 <div> Tag 이면서, class 속성 값이 news로 끝나는 Data를 모두 출력을 하는 것을 확인 하실 수 있습니다.
3) attrs 를 이용하여 조건 속성 값을 입력하기
: 위에서 속성 값을 1:1로 매칭하는 방법 대신 attrs 를 이용하여, 조건 속성 값을 입력 할 수가 있습니다. dictionary 구조여서, 여러가지 값을 한 꺼번에 입력이 가능합니다. 아래와 같이 코드를 구현해보았습니다.
==================================================================================
# class = gnb_menu01, style = display:block; 의 조건을 가지는 Data를 출력하는 코드를 구현
result01_class04 = test_1.find_all('div', attrs = { 'class' : 'gnb_menu01', 'style' : "display:block;')
# result01_class04 입력된 값을 출력하는 함수
print(result01_class04)
==================================================================================
- 위 코드를 실행 시켜 보면 아래와 같이 class = gnb_menu01, style = display:block; 의 조건을 가지는 Data가 출력되는 것을 확인 하실 수 있습니다.
이상입니다. 지금까지 re 정규 표현식을 이용하여 크롤링 할 때 사용하는 조건 속성 값을 정의하는 내용에 대해서 포스팅을 하였습니다. 이전에 포스팅했던 내용도 사용이 가능하고, 이번에는 re 정규 표현식으로도 조건 속성 값을 입력할 수 있는 것을 확인하고 나서, 역시 프로그래밍의 정답은 없다는 걸 다시 한 번 깨닫게 되었습니다.
그래서 제가 개인적으로 언어가 좋은 거 같습니다. 표현의 방식이 다양한 것을 포용할 수 있는 유일한 도구라고 생각합니다. 영어도 원어민들이 자주 사용하는 패턴이 있고, 문장이 있지만, 자신만의 문장을 가지고 대화를 할 때, 그게 문법적으로 틀리지 않았다면, 틀렸다라고 코멘트 받는 건 잘 못 됐다라고 생각합니다. 물론, 좋은 패턴과 문장 구조는 받아 들어야겠지만, 무조건 그게 벗어난다고 해서 틀렸다라고 매도하는 건 잘못 된 거 같습니다. 항상 자신만의 생각으로 남에게 피해주지 않는 한에서 능력을 펼쳤으면 합니다. 그럼 이만 마무리 하도록 하겠습니다. 항상 같이 공부하고, 같이 성장하시죠! 감사합니다.
제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
'HTML & CSS' 카테고리의 다른 글
HTML (Hyper Text Markup Language) 의 정의 및 HTML 태그, W3 (0) | 2021.03.02 |
---|---|
웹 페이지 크롤링 작업 수행 위한 기초 지식 이해하기 - requests 라이브러리 (0) | 2021.02.27 |
웹 페이지 기본 지식 이해하기 - HTTP (Hyper Text Transfer Protocol) 과 웹페이지 호출 Method GET & POST (0) | 2021.02.20 |
BeautifulSoup 패키지를 이용해서 HTML 내용 가져오기 (14) | 2021.02.13 |
웹 페이지 크롤링 작업 수행 위한 기초 지식 이해하기 - OPEN API 이용하기 (4) | 2021.02.13 |
댓글