본문 바로가기
HTML & CSS

웹페이지 크롤링 + re 정규 표현식을 이용하여 조건 속성 값 정의 하기

by ★√★ 2021. 3. 1.

 안녕하세요 Davey 입니다. 오늘 주요 다룰 내용은 re 정규 표현식을 이용하여 크롤링 할 때 사용하는 조건 속성 값을 정의하는 내용입니다. 기존에는 머리 문자와 끝 문자를 이용해서 조건 속성 값을 정의하는 것도 설명은 드렸습니다.

 

re-정규-표현식-썸네일
re-정규-표현식

 

오늘 내용은 비슷하지만, 사용한 패키지가 re 정규 표현식 패키지를 이용한다라고 이해하시면 됩니다. re에 관한 포스팅 및 크롤링 조건 속성 값 정의 관련 포스팅을 을 먼저 보고 오시면, 더 이해하는데 도움이 되실 듯합니다. 아래 Link 참조 하세요. 

 

 

 

Python 파이썬 re, ravel, flatten 함수를 이용해보기

안녕하세요, Davey 입니다. 오늘은, "r" 로 시작하는 함수와 그와 관련된 함수를 설명 할 예정입니다. 오늘 설명할 함수는, re, ravel, flatten 함수 입니다. "re" 은 파이썬의 기본 함수이고, "ravel, faltten"

davey.tistory.com

 

웹페이지 분석 + 크롤링 - id 와 class 속성을 이용하여 원하는 Data를 추출하기

안녕하십니까, Davey입니다. 오늘 포스팅할 내용은, 크롤링 할 때 id와 class를 이용하여, 원하는 Data를 추출하는 법에 대한 내용입니다. 이전에 requests, BeautifulSoup에 대한 포스팅을 안보고 오셧다면,

davey.tistory.com

 

웹페이지 크롤링 + CSS 메소드를 이용하여 원하는 Data 추출 하기

안녕하세요, Davey 입니다. 오늘은 CSS 함수를 이용하여, 웹페이지에서 원하는 Data를 추출하는 법에 대해서 포스팅할 예정입니다. 이전에 설명드린 내용은, BeautifulSoup의 find와 find_all 함수를 이용하

davey.tistory.com

 

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 값이 출력되는 걸 확인 하실 수 있습니다. 

 

re-정규-표현식-관련-사진1
re-정규-표현식-관련-사진1

 

- 이 출력한 Data에서 첫 번째 <h> 태그의 내용을 출력하려면 아래와 같이 코드를 수정하면 됩니다. 여기에서 추가적으로 설명을 드리면, 출력되는 Form이 List Form이기 때문에, "[]" 를 이용하여, 원하는 순번의 Data를 출력하실 수 있습니다.

 

==================================================================================

 

# List 순번의 Data를 출력할 수 있게 

print(result01_class01[0])

==================================================================================

 

- 위 코드를 실행 시키면 아래와 같이 한 가지 값만 출력되는 것을 확인 하실 수 있습니다. 

 

re-정규-표현식-관련-사진2
re-정규-표현식-관련-사진2

- 그럼 머리 글자와 끝 글자를 이용하여 출력하는 방법을, re 정규 표현식을 이용하여, 출력해보도록 하겠습니다. 

 

 1) 머리 글자를 이용하여, 출력하는 re 정규 표현식

["^원하는 앞글자+." ] 패턴으로 구성하여, 조건 속성 값을 입력 할 수가 있습니다. 쉬운 이해를 돕기 위해서 아래와 같이 예제를 준비하였습니다. 

 

==================================================================================

 

# <div> 태그 중에 class 값이 "r" 로 시작하는 모든 Data를 출력하는 코드 구현  

result01_class02 = test_1.find_all('div', class_ = re.compile('^r+.'))



# result01_class02 입력된 값을 출력하는 함수

print(result01_class02)

 

==================================================================================

 

re-정규-표현식-관련-사진3

 

 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를 모두 출력을 하는 것을 확인 하실 수 있습니다. 

 

re-정규-표현식-관련-사진4

 

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-정규-표현식-관련-사진5

 

 이상입니다. 지금까지  re 정규 표현식을 이용하여 크롤링 할 때 사용하는 조건 속성 값을 정의하는 내용에 대해서 포스팅을 하였습니다. 이전에 포스팅했던 내용도 사용이 가능하고, 이번에는 re 정규 표현식으로도 조건 속성 값을 입력할 수 있는 것을 확인하고 나서, 역시 프로그래밍의 정답은 없다는 걸 다시 한 번 깨닫게 되었습니다.

 

 그래서 제가 개인적으로 언어가 좋은 거 같습니다. 표현의 방식이 다양한 것을 포용할 수 있는 유일한 도구라고 생각합니다. 영어도 원어민들이 자주 사용하는 패턴이 있고, 문장이 있지만, 자신만의 문장을 가지고 대화를 할 때, 그게 문법적으로 틀리지 않았다면, 틀렸다라고 코멘트 받는 건 잘 못 됐다라고 생각합니다. 물론, 좋은 패턴과 문장 구조는 받아 들어야겠지만, 무조건 그게 벗어난다고 해서 틀렸다라고 매도하는 건 잘못 된 거 같습니다. 항상 자신만의 생각으로 남에게 피해주지 않는 한에서 능력을 펼쳤으면 합니다. 그럼 이만 마무리 하도록 하겠습니다. 항상 같이 공부하고, 같이 성장하시죠! 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab