본문 바로가기

Python_Beginer/Note

Python 수강 노트 11

반응형

- 정규표현식
  1. 문자 클래스 [](character class)
     문자 클래스로 만들어진 정규식은 "[와 ] 사이의 문자들과 매치"라는 의미를 갖는다.
 ^ 메타 문자가 사용될 경우에는 반대(not)라는 의미를 갖는다.
[^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치
[a-zA-Z] : 알파벳 모두 / [0-9] : 숫자
[자주 사용하는 문자 클래스]
[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식들은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.
\d - 숫자와 매치, [0-9]와 동일한 표현식이다.
\D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
\s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
\S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
\w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.
대문자로 사용된 것은 소문자의 반대임을 추측할 수 있을 것이다.
  2. Dot .
줄바꿈 문자인 \n를 제외한 모든 문자와 매치됨을 의미
"aab"는 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
"a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
"abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.
문자 클래스([]) 내에 Dot(.) 메타 문자가 사용된다면 이것은 "모든 문자"라는 의미가 아닌 문자 . 그대로를 의미.
a.b -> aab acb
a[.]b   -> a.b 
  3. 반복 *
사용된 *의 의미는 *바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미.
ca*t -> ca*(0~무한대)t -> ca*0t -> ct
 -> ca*1t -> cat
     -> ca*2t -> caat
  4. 반복 +
+는 최소 1번 이상 반복될 때 사용한다. 즉, *가 반복 횟수 0부터라면 +는 반복 횟수 1부터인 것.
ca+t -> ca+(1개이상)t -> cat
ca+t -> ca+(1개이상)t -> caat
ca+t -> ca+(1개이상 무한대)t -> caaat
  5. 반복 {m,n}, ?
-> {m} 
   ca{2}t -> c + a(반드시 2번 반복) + t
-> {m, n}
   ca{2,5}t -> c + a(2~5회 반복) + t
    -> ?
   ab?c -> a + b(있어도 되고 없어도 된다) + c
  6. 정규식을 이용한 문자열 검색
match()     문자열의 처음부터 정규식과 매치되는지 조사한다. match의 결과값이 있을 때만 그 다음 작업을 수행.
search() 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. ID 중복 체크에 많이 사용된다.
findall() 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다 for 문에 자주 사용된다.
finditer() 정규식과 매치되는 모든 문자열(substring)을 iterator 객체로 리턴한다 
  7. match 객체의 메서드
group() 매치된 문자열을 리턴한다.
start() 매치된 문자열의 시작 위치를 리턴한다.
end() 매치된 문자열의 끝 위치를 리턴한다.
span() 매치된 문자열의 (시작, 끝) 에 해당되는 튜플을 리턴한다.
  8. 컴파일 옵션(약어)
DOTALL(S)     - . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다. \n 문자도 포함하여 매치하고 싶다면 re.DOTALL 또는 re.S 옵션을 사용해 정규식을 컴파일.
IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
MULTILINE(M)  - 여러줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다) ^는 문자열의 처음을 의미하고, $은 문자열의 마지막을 의미. 
^python인 경우 문자열의 처음은 항상 python으로 시작해야 매치. python$이라면 문자열의 마지막은 항상 python으로 끝나야 매치.
VERBOSE(X)    - verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들수 있고 주석등을 사용할 수 있게된다.)
  9. 백슬래시 문제
  10. 메타문자
    | : "or"의 의미와 동일하다. A|B 라는 정규식이 있다면 이것은 A 또는 B라는 의미.
^ : 문자열의 맨 처음과 일치함을 의미.
$ : 문자열의 끝과 매치함을 의미.
\A : 문자열의 처음과 매치됨을 의미. 라인과 상관없이 전체 문자열의 처음하고만 매치.
\Z : 문자열의 끝과 매치됨을 의미. 전체 문자열의 끝과 매치.
\b : 단어 구분자(Word boundary).단어는 whitespace에 의해 구분/
\B : whitespace로 구분된 단어가 아닌 경우에만 매치.
  11. 그룹핑 : 그룹을 만들어 주는 메타문자는 바로 (과 ).
    group(0) : 매치된 전체 문자열
    group(1) : 첫 번째 그룹에 해당되는 문자열
    group(2) : 두 번째 그룹에 해당되는 문자열
    group(n) : n 번째 그룹에 해당되는 문자열
  12. 그룹핑된 문자열 재참조하기
    한번 그룹핑된 문자열을 재참조(Backreferences)할 수 있다.
(\b\w+)\s+\1은 (그룹1) + " " + "그룹1과 동일한 단어" 와 매치됨을 의미.
재 참조 메타문자인 \1이다. \1은 정규식의 그룹중 첫번째 그룹을 지칭.(\2는 두번재 그룹)
  13. 그룹핑된 문자열에 이름 붙이기
    그룹을 인덱스가 아닌 이름(Named Groups)으로 참조.
(\w+) --> (?P<name>\w+)
  14. 전방 탐색(Lookahead Assertions) 
    - 긍정형 전방 탐색((?=...)) : ... 에 해당되는 정규식과 매치되어야 하며 조건이 통과되어도 문자열이 소비되지 않는다.
.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$
    - 부정형 전방 탐색((?!...)) : ... 에 해당되는 정규식과 매치되지 않아야 하며 조건이 통과되어도 문자열이 소비되지 않는다.
.*[.](?!bat$).*$
  15. 문자열 바꾸기
    sub 메서드를 이용하면 정규식과 매치되는 부분을 다른 문자로 쉽게 바꿀 수 있다.
바꾸기 횟수를 제어하려면 다음과 같이 세 번째 입력 인수로 count 값을 넘기면 된다.
subn 역시 sub와 동일한 기능을 하지만 리턴되는 결과를 튜플로 리턴한다는 차이가 있다. 리턴된 튜플의 첫 번째 요소는 변경된 문자열이고, 두 번째 요소는 바꾸기가 발생한 횟수이다.
  16. sub 메서드 사용 시 참조 구문 사용하기
  17. sub 메서드의 입력 인수로 함수 넣기
  18. Greedy vs Non-Greedy
  
< 190224 >
- 아나콘다 설치
- C:/사용자/계정/내 문서에 소스 파일 붙이기
- 주피터 노트북 실행
- 크롬 브라우저 실행됨(주피터 노트북 커맨드 종료하면 안됨)
- 워크스페이스 공간은 내 문서로 지정된다.
- 5장 폴더 - cho5_px
- rename - 파일 이름 변경 후 중간중간 file - save and chkpoint(ctrl + s)
- def <함수이름><인자1><인자2>
- 책자 89 ~
-
int a, b:
a = 1
b = 2

int add(c, d)
{
e = c + d;
retrun e;
}

int main()
{
print('%d', add(a, b)
}
- 람다에 해석은 뒤에서부터 앞으로 해석한다.
- 클래스 : 객체지향적인 특징 따로따로 완성품을 모아 또 다른 완성품을 만드는 것.
- 서로 연관 있는 변수들과 함수들을 이쁘게 묶어두고 이름을 붙인 것.
- 기본 문법 
class MyFirstClass:
pass
- self : 전역 변수 만들어주는 것
- __init__ : 어떤것이 실행 됫을때 바로 생성해야되는 것(파이썬 클래스의 생성자)
- . 은 하위 메뉴(a.b -> a에 하위메뉴 b)
- 메서드 : 클래스의 내부 함수 / 함수와 동일하게 선언하고 사용
- 상속 : 유전 / 자식의 성질이 부모의 해당 하는 성질을 덮어쓴다.
- 모듈 : 클래스를 모아둔 것
- 패키지 : 모듈을 모아둔 것
- 매직 명령어 : https://studymake.tistory.com/601
- import 모듈 = from 모듈 *
- from 모듈 import 가져올 모듈
- from 모듈 import 가져올 모둘 as 단축이름
- __name__ == '__main__' : https://wikidocs.net/29
- __init__.py : 패키지 파일

<table>
<tr>(table row)
<th>(table head)
</th>
</tr>
<tr>
<td>(table define/detail(내용))
</td>
</tr>
</tabel>
- id 대신 넣을수 있는거 class / name을 늘수 있다.
<th id = "choco">초콜릿</th>
<th id = "cookie">과자</th>
- find_next_sibling()
- http 상태코드 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
- 클래스보다 ID 값이 더 높다.

< 190303 >
- driver.get('site 주소')
- driver.find_element_by_name().send_keys() : name으로 검색한 부분에 키값을 입력한다.
- driver.find_element_by_id().send_keys() : id로 검색한 부분에 키값을 입력한다.
- driver.find_element_by_xpath().click() : 버튼으로 눌러서 검색하여 클릭한다.
- strong.tit_subject : strong에 class가 tit_subject를 가져온다.(css -> . = class / # = ID)
- driver.implicitly_wait() : 시간 벌기
- driver.quit() : 크롬 종료
- 각 사이트 분석 기법
< 지메일 로그인 사이트 분석 기법 >
- 지메일 로그인 Site 주소
https://accounts.google.com/ServiceLogin/identifier?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1&flowName=GlifWebSignIn&flowEntry=AddSession
- ID Html 분석
<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username"
spellcheck="false" tabindex="0" aria-label="이메일 또는 휴대전화" name="identifier"
autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="" badinput="false">
- PW Html 분석
<input type="password" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="current-password"
spellcheck="false" tabindex="0" aria-label="비밀번호 입력" name="password"
autocapitalize="off" dir="ltr" data-initial-dir="ltr" data-initial-value="" badinput="false">
- ID next 클릭 분석(Xpath)
next 버튼 sample 1
//*[@id="identifierNext"]/div[2]
next 버튼 sample 2
//*[@id="identifierNext"]/content/span
next 버튼 sample 3
//*[@id="identifierNext"]/content
- PW next 클릭 분석(Xpath)
next 버튼 sample 1
//*[@id="passwordNext"]/div[2]
next 버튼 sample 2
//*[@id="passwordNext"]/content/span
next 버튼 sample 3
//*[@id="passwordNext"]/content

< 다음메일 로그인 사이트 분석 기법 >
- 다음메일 로그인 Site 주소
https://logins.daum.net/accounts/loginform.do?url=https%3A%2F%2Fmail.daum.net%2F
- ID Html 분석
<input type="email" id="id" name="id" value="" class="tf_g" style="ime-mode:disabled;">
- PW Html 분석
<input type="password" id="inputPwd" name="pw" class="tf_g" maxlength="32" autocomplete="off" style="ime-mode:disabled;">
- 로그인 버튼 분석(Xpath)
로그인 버튼 sample 1
//*[@id="loginBtn"]

< 네이버 로그인 사이트 분석 기법 >
- 네이버 로그인 Site 주소
https://nid.naver.com/nidlogin.login?mode=number
- 일회용 비밀번호 입력 Html 분석
<input type="text" id="disposable_num" name="key" maxlength="20" placeholder="일회용 로그인 번호" class="int" autocomplete="off">
- 로그인 버튼 분석(Xpath)
로그인 버튼 sample 1
//*[@id="frmNIDLogin"]/fieldset/span/input
- 네이버 메일 버튼 분석(Xpath)
메일 버튼 sample 1
//*[@id="PM_ID_ct"]/div[1]/div[2]/div[1]/ul[1]/li[1]/a/span[1]
- 스크래피를 이용해서 크롤러를 만드는 과정
1. 크롤링할 아이템을 설정합니다.
2. 실제 크롤링할 스파이더를 만듭니다.
3. 크롤링할 사이트와 크롤링 규칙을 설정한다.(정규식)
4. 스파이더의 종류에 따른 몇 가지 설정을 추가합니다. 크롤링할 URL의 패턴 등을 설정합니다.
5. HTML 문서를 파싱한 후 크롤러가 실행할 작업을 정의합니다.
6. 크롤러를 실행합니다.
- Framework를 만들기
scrapy startproject 프로젝트명
- tree 구성보기
tree 프로젝트명
- items.py : 내가 가져와야 될 것을 정의하는 파일
- scrapy genspider : 스파이더를 생성해주는 명령어
- spider 종류에
basic : 기본적인 크롤러
crawl : 재귀적으로 탐색 크롤러
xmlfeed : xml 피드를 크롤러
csvfeed : xmlfeed 크롤러랑 비교하면 각 행을 크롤링
scrapy genspider -t crawl book_crawl hanbit.co.kr
- scrapy crawl <크롤러이름> -o <출력파일이름>

< 190310 >
- 데이터 주무르기 P56
- 행 방향 삭제 drop / 열 방향 삭제 del
- 화면 갱신 inplace=True
- 단순히 두 개의 변수가 어느 정도 강한 관계에 있는가를 측정하는 단순상관분석(simple correlation analysis), 
  3개 이상의 변수들간의 관계에 대한 강도를 측정하는 다중상관분석이 있다. 
  다중상관분석에서 다른 변수들과의 관계를 고정하고 두 변수만의 관계에 대한 강도를 나타내는 것을 편상관계분석(partial correlation analysis)
- 두 변수간의 관련성을 구하기 위해 보편적으로 이용
r이 -1.0과 -0.7 사이이면, 강한 음적 선형관계,
r이 -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계,
r이 -0.3과 -0.1 사이이면, 약한 음적 선형관계,
r이 -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계,
r이 +0.1과 +0.3 사이이면, 약한 양적 선형관계,
r이 +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계,
r이 +0.7과 +1.0 사이이면, 강한 양적 선형관계
- np.corrcoef : 상관계수 분석
- matplotlib : 시각화 도구
- %matplotlib inline : 그래프의 결과를 출력 세션에 나타나게 하는 설정
- 기본 문법(그래프 출력)
plt.figure()
plt.plot([숫자값])
plt.show()
- plt.figure(figsize=(가로사이즈,세로사이즈))
- plt.grid() 격자출력
- plt.xlabel('x축 라벨이름')
- plt.ylabel('y축 라벨이름')
- plt.title('타이틀 이름')
- label='범례 이름'
- plt.legend() 범례출력
- linestyle='선 스타일'
- color='색깔'
- plt.xlim([영역, 영역]) x축의 영역
- plt.ylim([영역, 영역]) y축의 영역
- SQLite (개발자를 위한 파이썬 10장)
https://www.sqlite.org/
- SQL functions / Date & time functions
https://sqlitebrowser.org/
- 장고 : 웹 프레임워크 개발 패키지
- 프로젝트 : 웹 사이트에 대한 전체 프로그램
- 애플리케이션 : 모듈화된 단위 프로그램
- 모델 : 데이터베이스에 저장되는 데이터
- 탬플릿 : 사용자에게 보여지는 UI
- 뷰 : 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리한 결과를 템플릿에 전달하는 역활
- django.contrib.admin -- 관리용 사이트, 곧 사용하게 될겁니다.
- django.contrib.sessions -- 세션 프레임워크.
- py manage.py migrate 적용명령어
- ForeignKey 외래키

반응형