본문 바로가기

SeSAC 금융데이터 분석가/웹 크롤링

9/1 목

728x90

1. Regex(re) module (정규표현식)

- match(): 문자열 처음부터 매치여부를 조사, 객체 리턴
- search(): 문자열 전체를 조사, 처음 검색된 최초 문자열 객체 리턴
- findall(): 매치되는 모든 문자열 리스트로 리턴
- finditer(): 매치되는 모든 문자열의 반복가능한 객체로 리턴

- group(): 매치된 문자열의 리턴
- start(): 매치된 문자열의 시작위치 리턴
- end(): 매치된 문자열의 끝 위치 리턴
- span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플 리턴

 

- ^ 문자열의 시작
- 표현식 : ^I like

 

- $ 문자열의 끝
- 표현식 : orange!$

 

\ 특수문자
- 표현식 : \$

 

. 모든 문자
- 표현식 : .
- 문자가 하나씩 추출됨

 

[ ] 범위 판단
- 표현식 : [orn]
- 문자 하나씩 추출
- 표현식:[orn][orn].

 

[ ] 범위 판단 응용

- 표현식 : [0-9]

- 표현식:[A-Za-z]

- 표현식:[가-힣]

- 표현식:[^A-Za-z]

 

() 그룹
- 표현식 : (orange)
- 표현식:(orange|like) # |는 or

 

? - 없거나 한 개, * - 0개 이상, + - 1개 이상

- 표현식 : a.c
- 표현식 : a.?c
- 표현식 : ab*c
- 표현식 : ab+c

 

[ ]* [ ]+
- 표현식 : [^ ]+ # 공란이 아닌 텍스트 모두 선택. [^ ]로만 주면 문자 하나씩 출력
- 표현식 : a[bd]*c # 텍스크 안에 문자들 순서가 바뀌어도 [ ] 배열 안에만 있다면 작동함 ex) addbbc

[^ ]+
a[bd]*c

{} 개수
- 표현식 : .{5} # 모든 문자를 5개씩 자르기
- 표현식 : [abc]{3} # [ ] 배열 안에 있는 문자들을 3개씩 자르기

[abc]{3}

\d, \D, \w, \W, \s, \S
- \d = [0-9]
- \D = [^0-9]
- \w = [a-zA-Z0-9_]
- \W = [^a-zA-Z0-9_]
- \s = [ \t\n\r\f\v] 공백, 탭, 라인피드, 캐리지리턴, 폼피드, 수직탭
- \S = [^ \t\n\r\f\v]

 

?= - 전방탐색, ?<= - 후방탐색
- 표현식 : oran(?=ge!) # 끝에 ge!를 가진 oran을 출력
- 표현식 : (?<=ora)nge! # 앞에 ora을 가진 nge!를 출력

 

?! 부정형
- 표현식 : <span>((?!<br>).)*<\/span> # span 태그 안에 <br> 태그를 가지지 않은 모든 문자(없는 것도 포함)를 가져오기

<span>((?!<br>).)*<\/span>

re.sub(정규표현식, 치환할 문자, 대상 문자)

 

cf. 파이썬에서 전화번호 찾기

- 표현식 : [0-9]{3}-[0-9]{3,4}-[0-9]{4}

 

cf. 태그 지우는 정규표현식

'\<[^\>]*\>'

 

2. Selenium

driver.get()
- driver 객체에서 get 메소드를 통해 특정 웹사이트에 접속 가능

driver.get(‘https://www.jungle.co.kr/’)

 

find_element()
- 한 개의 태그만 선택

element = driver.find_element(By.CLASS_NAME, ‘thumb_list’)

 

find_elements()
- 일치하는 모든 태그 선택

elements = driver.find_elements(By.TAG_NAME, ‘li’)

 

By
- CSS_SELECTOR: 자식, 후손 찾을 때
- TAG_NAME
- ID
- CLASS_NAME
- XPATH ★

 

속성 값 추출
- 태그 내 텍스트 추출
- 속성 값 추출, element.get_attribute()

tag_text = element.text
img_src = element.get_attribute(‘src’)

 

클릭
- element.click()

 

키보드 입력
- element.send_keys()

element.send_keys(‘python’)
element.send_keys(Keys.RETURN)

send_keys(Keys.~)

 

처음 접속 시 대기 (페이지 로딩 끝나면 진행)

driver.implicitly_wait(5)

 

Python 잠시 멈추기

import time
time.sleep(3)

 

스크롤

driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

개발자 도구_Console에 스크립트를 입력해서도 이행할 수 있음

 

3. TypeError: expected string or bytes-like object

re.sub으로 불필요한 값들 치환해줄 때 발생하는 에러. 대상 문자가 *문자가 아니기 때문에 인식을 못 하는 것.

대상 문자 Type을 보면 <class 'bs4.element.Tag'>. 이를 str()으로 감싸서 바꿔주자

728x90

'SeSAC 금융데이터 분석가 > 웹 크롤링' 카테고리의 다른 글

9/2 금  (0) 2022.09.02
8/31 수  (0) 2022.08.31