3. urllib2 패키지
3
http, ftp 서버와의 상호작용이 필요한 클라이언트 작성시 사용.
웹 페이지, 자동화 도구, 프록시, 웹크롤러 등에서 데이터를 긁어오는데 주로 사용.
urllib vs. urllib2
- URL 만 vs. URL, Request
urlib2.urlopen(url [, data [, timeout]])
- 요청 보내기
- url : 문자열 url, Request 클래스의 인스턴스
- data : POST 방식 전송시 폼데이터, URL 인코딩된 데이터
- timeout : 초
- 파일객체와 유사한 객체 반환
4. urllib2.urlopen
4
메소드 설명
read(size) Size 만큼의 문자열 반환, 지정하지 않으면 전체
readline() 한줄의 텍스트 반환
readlines() 모든줄을 리스트로 반환
close() 연결 닫기
info() URL 과 관련된 메타정보가 있는 객체 반환
getcode() HTTP 응답코드 정수 반환
geturl() 반환 데이터의 실제 URL 반환, redirection 고려
urlopen() 함수 반환객체의 함수들
6. urllib2.Request
6
기본적인 것은 url 문자열로 호출
상세한 지정을 Request 클래스 이용
> {
"foo": [
"bar"
],
"q": [
"query string"
]
}
data 를 추가하면 post 방식으로 자동 변경
urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
data 추가
8. urllib2.Request
8
Request.add_data(data)
- 요청에 데이터 추가
- POST 방식으로 변경, data 는 URL 인코딩된 데이터
Request.get_method()
- http method 반환
Request.has_data()
- 데이터가 있는지 확인
Request.get_data()
- 요청에 데이터가 있으면 반환
Request.add_header(key, val)
- 헤더정보 추가 , key 가 헤더이름, val 가 헤더값
Request.add_unredirected_header(key, header)
- redirect 가 있을경우에 추가되지 않을 헤더정보 추가
Request.has_header(header)
- 헤더정보가 있는지
9. urllib2.Request
9
Request.get_full_url()
- 전체 url 반환
Request.get_type()
- url의 타입반환
Request.get_host()
- 요청을 보낼 host 반환
Request.get_selector()
- URL 에서 selector 부분 반환
Request.get_header(header_name, default=None)
- 지정한 헤더에 대한 값 반환
Request.header_items()
- 헤더정보 전체 반환
Request.is_unverifiable()
- 요청을 검증할수 없는 경우 True 반환
10. urllib2.build_opener
10
urlopen() 함수는 인증, 쿠키 등의 HTTP 고급 기능지원하지 않음.
커스텀 오프너를 만들어야 함.
필요한 handler 를 추가하는 방식으로 생성
여러가지 handler..
urllib2.build_opener([handler, ...])
클래스 설명
urllib2.HTTPBasicAuthHandler 기본 http 인증 처리
urllib2.HTTPDigestAuthHandler HTTP digest 인증 처리
urllib2.HTTPCookieProcessor HTTP 쿠키처리
urllib2.HTTPHandler url을 HTTP 로 열기
urllib2.HTTPSHandler url을 HTTPS 로 열기
urllib2.HTTPRedirectHandler HTTP 페이지 전환을 처리
17. error
17
exception urllib2.URLError
- IOError 의 서브 클래스
- reason 속성이 문제에 대한 정보를 가지고 있다.
exception urllib2.HTTPError
- URLError의 서브 클래스
- HTTP 프로토콜과 관련된 문제
- 인증요구와 같은 이벤트를 알리는데 사용.
- HTTP Staus code, reason 속성
exception urllib.ContentTooShortError
- 다운로드된 데이터의 양이 예상한것(Content-length) 적은 경우 발생
18. ftplib
18
FTP 프로토콜로 클라이언트쪽 구현시 사용
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
- FTP 연결을 나타내는 객체 생성
- host 를 연결하면 자동으로 connect() 함수 호출.
- user, password, acct 를 지정하면 login() 함수 호출.
FTP.connect(host[, port[, timeout]])
FTP.login([user[, passwd[, acct]]])
FTP.close()
19. ftplib
19
ftp.cwd(path)
- 디렉토리 변경, cd..
ftp.mkd()
- 서버에 새디렉토리 생성
ftp.rename(old, new)
- 서버의 파일 이름 변경
ftp.pwd()
- 현재 디렉토리 반환
ftp.rmd(dirname)
- 해당 디렉토리 삭제
ftp.dir(dirname)
- ‘LIST’ 명령 호출, 지정하지 않으면 현재 디렉토리 기준 출력
- dirname 지정하면 지정한곳으로 출력
ftp.size(filename)
- 지정한 파일의 사이즈 출력
20. ftplib
20
ftp.storbinary(command, file, [, blocksize])
- 이진 전송모드로 데이터 전송
- command 는 문자열, “STOR “+filename
- blocksize 는 전송에 사용할 블록크기
ftp.storlines(command, file)
- 텍스트 전송 모드로 데이터 전송
- command 는 문자열, “STOR “+filename
21. ftplib
21
ftp.retrlines(command [, callback])
- 서버에서 명령을 실행한 결과를 텍스트로 반환
- callback 은 콜백함수 지정, 지정하지 않으면 stdout
ftp.retrbianry(command, callback [, blocksizes [, rest]])
- 서버에서 실행한 결과를 이진 전송 모드로 반환
- command : “RETR ”+filename
- callback : 데이터 블록 받을때 마다 호출되는 함수
- rest : 파일 오프셋
22. base64
22
base64, base16, base32 인코딩을ㄹ 사용하여 이진데이터를 텍스트로 인코딩 혹은 디코딩
메일첨부나 http 프로토콜에서 이진 데이터를 추가하는데 사용
altchars : base64 출력에서 +, 을 대체하기 위한 2개의 문자열 지정
YXNoODQ6MTIzNA==
ash84:1234
YXNoODQ6MTIzNA==
ash84:1234
61736838343A31323334
ash84:1234
MFZWQOBUHIYTEMZU
ash84:1234
24. xml.dom.minidom
24
XML 을 파싱해서 DOM 규약에 따라 메모리에 트리구조로 저장하는 기능 제공
parse, parseString() 으로 파싱
attributes
firstchild
lastchild
nodename
nodetype
getElementByTagName()
hasAttributes()
getAttribute()
documentElement()
appendChild()
removeChild()
replaceChild()
25. xml.sax
25
SAX2 API를 사용하여 API 문서를 파싱
start parsing
attr : domain t1
attr : price 12000
attr : domain gs
attr : domain ld
attr : domain sas
attr : domain 342d
end parsing
xml.sax.ContentHandler 의 서브클래스를 사용
일종의 handler
특정 경우에 특정 함수를 할당
- startDocuemnt : 문서 시작시 호출
- endDocuemnt : 문서 시작시 호출
- startElement : 엘리먼트 시작시
- endElement: 엘리먼트 끝날경우
26. xml.etree.ElementTree
26
계층적인 데이터를 저장하고 조작하는데 사용하는 ElementTree 객체 정의
찾기 : find(), finall(), findtext(), getroot(), get(), items(), keys()..
조작 : append(), clear(), insert(), remove(), set()(..
27. json
27
dump, load 함수는 파일객체 대상
dumps, loads 함수는 문자열 대상
{"habits": ["cooking", "camping", "sleeping"], "name": "ash84"}
<type 'dict'>
{u'habits': [u'cooking', u'camping', u'sleeping'], u'name':
u'ash84'}
28. json
28
object_hook : 디코딩된 결과 객체를 인수로 전달, 중간에 데이터 조작을 할 함수 지정.
cls : 디코딩할 JSONDecoder 하위 클래스 지정
parse_float, parse_int : 부동소수점, 정수값 디코딩을 위한 함수 호출 지정.
{u'name': u'ash8n4', 'habit': u'cooking'}
29. hashlib
29
다양한 보안 해시와 MD5, SHA 등의 Message-digest 알고리즘 구현 모듈
함수 설명
md5(data) MD5 해시(128비트)
sha1(data) SHA1 해시(160비트)
sha224(data) SHA224 해시(226비트)
shar256(data) SHA256 해시(256비트)
sha384(data) SHA384 해시(384비트)
sha512(data) SHA512 해시(512비트)
함수 설명
d.update(data) 새로운 데이터로 업데이트,
그러나 이어지는 것. 덮어써지는게 아니다.
d.digest() 무가공 바이트 문자열로 요약 값 반환
d.hexdigest() 16진수 숫자들로 인코딩된 요약텍스트
위의 함수의 리턴 객체에 대한 함수들.
31. 정리
31
urllib, urllib2 를 이용, 상세한 요청은 Request
인증, 쿠키 등의 고급 기능 => build_opener 이용, 커스텀 오프너
urlencode 는 호출시 반드시 사용.
error 처리를 잘 활용하자. 401, 404, 500
XML 파싱 => 용도와 크기 고려
JSON, dump, load 만 기억
hashlib 에서 update 는 갱신이 아니라 concat