[위 에] Python 3. x 파충류 강좌: 웹 페이지 오 르 기, 사진 오 르 기, 자동 로그 인

임병 문 에 반 카 카 오리지널.전재 출처 를 밝 혀 주 십시오http://blog.csdn.net/evankaka
요약: 본 고 는 Python 3.4 웹 페이지 오 르 기, 사진 오 르 기, 자동 로그 인 을 사용 합 니 다.그리고 HTTP 프로 토 콜 에 대해 간단 한 소 개 를 했다.파충 류 를 진행 하기 전에 간단하게 HTTP 프로 토 콜 에 대한 설명 을 한 다음 파충 류 를 진행 하 는 것 이 더 명확 하 다.
HTTP 프로 토 콜
       HTTP 는 Hyper Text Transfer Protocol (하이퍼텍스트 전송 프로 토 콜) 의 줄 임 말이다.그 발전 은 유 니 버 설 네트워크 협회 (World Wide Web Consortium) 와 인터넷 작업 팀 IETF (Internet Engineering Task Force) 가 합작 한 결과 (그들) 는 최종 적 으로 일련의 RFC 를 발 표 했 고 RFC 1945 는 HTTP / 1.0 버 전 을 정의 했다.그 중 가장 유명한 것 은 RFC 2616 이다.RFC 2616 은 오늘날 보편적으로 사용 되 는 버 전인 HTTP 1.1 을 정의 했다.       HTTP 프로 토 콜 (HyperText Transfer Protocol, 하이퍼텍스트 전송 프로 토 콜) 은 WWW 서버 에서 로 컬 브 라 우 저 로 하이퍼텍스트 를 전송 하 는 데 사용 되 는 전송 프로 토 콜 입 니 다.그것 은 브 라 우 저 를 더욱 효율적으로 하여 네트워크 전송 을 감소 시 킬 수 있다.이 는 컴퓨터 가 하이퍼텍스트 문 서 를 정확하게 전송 할 수 있 을 뿐만 아니 라 전송 문서 의 어느 부분 과 어떤 부분 이 먼저 표시 되 는 지 확인 합 니 다 (예 를 들 어 텍스트 가 도형 보다 먼저 표시 되 는 지).
 HTTP 요청 응답 모델
HTTP 프로 토 콜 은 항상 클 라 이언 트 가 요청 하고 서버 전송 응답 입 니 다.다음 그림 참조:
   [置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第1张图片
이렇게 하면 HTTP 프로 토 콜 을 사용 하 는 것 을 제한 하고 클 라 이언 트 가 요청 하지 않 았 을 때 서버 가 클 라 이언 트 에 메 시 지 를 보 내 는 것 을 실현 할 수 없습니다.
HTTP 프로 토 콜 은 상태 가 없 는 프로 토 콜 입 니 다. 같은 클 라 이언 트 의 이번 요청 은 지난번 요청 과 대응 하지 않 습 니 다.
작업 흐름
한 번 의 HTTP 작업 은 하나의 업무 라 고 하 는데 그 작업 과정 은 네 단계 로 나 눌 수 있다.
1) 우선 클 라 이언 트 와 서버 가 연결 되 어야 합 니 다.하이퍼링크 를 누 르 면 HTTP 작업 이 시 작 됩 니 다.
2) 연결 을 만 든 후 클 라 이언 트 는 서버 에 요청 을 보 냅 니 다. 요청 방식 의 형식 은 자원 식별 자 (URL), 프로 토 콜 버 전 번 호 를 통일 하고 뒤쪽 은 MIME 정보 입 니 다. 수식 자, 클 라 이언 트 정보 와 가능 한 내용 을 포함 합 니 다.
3) 서버 가 요청 을 받 은 후에 해당 하 는 응답 정 보 를 제공 합 니 다. 그 형식 은 하나의 상태 줄 입 니 다. 정보의 프로 토 콜 버 전 번호, 성공 또는 오류 코드 를 포함 하고 뒤쪽 은 MIME 정 보 는 서버 정보, 실체 정보 와 가능 한 내용 을 포함 합 니 다.
4) 클 라 이언 트 는 서버 가 되 돌아 오 는 정 보 를 브 라 우 저 를 통 해 사용자 의 디 스 플레이 에 표시 한 다음 에 클 라 이언 트 와 서버 가 연결 을 끊 는 다.
상기 과정 에서 한 단계 에 오류 가 발생 하면 오류 가 발생 한 정 보 는 클 라 이언 트 로 돌아 가 디 스 플레이 출력 이 있 습 니 다.사용자 에 게 이러한 과정 은 HTTP 가 스스로 완성 한 것 으로 사용 자 는 마우스 로 클릭 하고 정보 가 표시 되 기 를 기다 리 면 된다.
요청 헤더 요청 헤더 는 클 라 이언 트 가 서버 측 에 요청 한 추가 정보 와 클 라 이언 트 자체 의 정 보 를 전달 할 수 있 도록 합 니 다.자주 사용 하 는 요청 헤더 AcceptAccept 요청 헤더 도 메 인 은 클 라 이언 트 가 어떤 유형의 정 보 를 받 아들 이 는 지 지정 하 는 데 사 용 됩 니 다.eg: Accept: image / gif 는 클 라 이언 트 가 GIF 이미지 형식의 자원 을 받 아들 이 기 를 원 하 는 것 을 나타 낸다.Accept: text / html 은 클 라 이언 트 가 html 텍스트 를 받 아들 이 기 를 원 하 는 것 을 나타 낸다.Accept - Charset Accept - Charset 요청 헤더 도 메 인 은 클 라 이언 트 가 받 아들 일 문자 집합 을 지정 하 는 데 사 용 됩 니 다.eg: Accept - Charset: iso - 8859 - 1, gb 2312. 요청 메시지 에 이 도 메 인 을 설정 하지 않 으 면 부족 한 것 은 모든 문자 집합 을 받 아들 일 수 있 습 니 다.Accept - Encoding Accept - Encoding 요청 헤더 도 메 인 은 Accept 와 유사 하지만 받 아들 일 수 있 는 콘 텐 츠 인 코딩 을 지정 하 는 데 사 용 됩 니 다.eg: Accept - Encoding: gzip. deflate. 요청 메시지 에 이 도 메 인 서버 를 설정 하지 않 으 면 클 라 이언 트 가 각종 콘 텐 츠 인 코딩 을 받 아들 일 수 있다 고 가정 합 니 다.Accept - language Accept - language 요청 헤더 영역 은 Accept 와 유사 하지만 자연 언어 를 지정 하 는 데 사 용 됩 니 다.eg: Accept - language: zh - cn. 요청 메시지 에 이 헤더 필드 가 설정 되 어 있 지 않 으 면 서버 는 클 라 이언 트 가 각종 언어 에 대해 받 아들 일 수 있다 고 가정 합 니 다.Authorization Authorization 요청 헤더 필드 는 클 라 이언 트 가 특정한 자원 을 볼 권리 가 있다 는 것 을 증명 하 는 데 사 용 됩 니 다.브 라 우 저가 한 페이지 에 접근 할 때 서버 의 응답 코드 가 401 (권한 이 부여 되 지 않 음) 이면 Authorization 요청 헤더 필드 를 포함 하 는 요청 을 보 내 서버 에 검증 을 요구 할 수 있 습 니 다.Host (요청 을 보 낼 때 이 헤더 도 메 인 은 필수 입 니 다) Host 요청 헤더 도 메 인 은 요청 한 자원 의 인터넷 호스트 와 포트 번 호 를 지정 하 는 데 사 용 됩 니 다. 보통 HTTP URL 에서 추출 합 니 다. eg: 브 라 우 저 에 입력 합 니 다.http://www.guet.edu.cn/index.html브 라 우 저가 보 낸 요청 메시지 에는 Host 요청 헤더 필드 가 포함 되 어 있 습 니 다.다음 과 같 습 니 다: Host: www. guet. edu. cn 은 부족 한 포트 번호 80 을 사용 합 니 다. 포트 번 호 를 지정 하면 Host: www. guet. edu. cn: 포트 번호 User - agent 를 지정 합 니 다. 저희 가 인터넷 에 접속 할 때 환영 정 보 를 볼 수 있 습 니 다. 그 중에서 운영 체제 의 이름과 버 전, 사용 하 는 브 라 우 저의 이름과 버 전 을 보 여 줍 니 다.많은 사람들 이 신기 하 게 여 긴 다. 실제로 서버 애플 리 케 이 션 은 User - agent 라 는 요청 헤더 필드 에서 이 정 보 를 얻 는 것 이다.User - agent 는 클 라 이언 트 가 운영 체제, 브 라 우 저, 기타 속성 을 서버 에 알 릴 수 있 도록 헤더 도 메 인 을 요청 합 니 다.그러나 이 헤더 필드 는 필요 하지 않 습 니 다. 브 라 우 저 를 만 들 고 User - agent 를 사용 하지 않 고 헤더 필드 를 요청 하면 서버 에서 우리 의 정 보 를 알 수 없습니다.요청 헤더 예: GET / form. html HTTP / 1.1 (CRLF) Accept: image / gif, image / x - xbitmap, image / x - xbitmap, image / jpeg, application / x - shockwav- flash, application/ vnd. ms - excel, application/ vnd. ms - powerpoint, application/ msword, * / * (CRLF) Accept - Language: zh - cn (CRLF) Accept - Encoding: gzip, deflate (CRLF) If - Modif변 경 된 - Since: Wed, 05 Jan 2007 11: 25 GMT (CRLF) NonCRLF (CRLF) If - Match: WF - Match: WF - Match: WF - Match: WF - Match: WF - Match: WF - Mat/"80b1a4c018f3c41:8317" (CRLF)User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)Host:www.guet.edu.cn (CRLF)Connection:Keep-Alive (CRLF)(CRLF)
GET /form.html HTTP/1.1 (CRLF)Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)Accept-Language:zh-cn (CRLF)Accept-Encoding:gzip,deflate (CRLF)If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)Host:www.guet.edu.cn (CRLF)Connection:Keep-Alive (CRLF)(CRLF)

응답 헤더 응답 헤 더 는 서버 가 상태 줄 에 놓 을 수 없 는 추가 응답 정보 와 서버 에 대한 정보, Request - URI 에 표 시 된 자원 에 대한 다음 접근 정 보 를 전달 할 수 있 도록 합 니 다. 자주 사용 하 는 응답 헤더 Location 응답 헤더 도 메 인 은 수신 자 에 게 새로운 위치 로 재 설정 하 는 데 사 용 됩 니 다. Location 응답 헤더 도 메 인 은 도 메 인 이름 을 바 꿀 때 자주 사 용 됩 니 다. Se서버 응답 헤더 필드 는 서버 가 요청 을 처리 하 는 소프트웨어 정 보 를 포함 하고 있 습 니 다. User - agent 요청 헤더 필드 와 대응 합 니 다. 다음은 서버 응답 헤더 필드 의 예 입 니 다. Server: Apache - Coyote / 1.1WW - AuthenticateWW - Authenticate 응답 헤더 필드 는 401 (권한 이 부여 되 지 않 은) 에 포함 되 어야 합 니 다.응답 메시지 에서 클 라 이언 트 가 401 응답 메 시 지 를 받 았 을 때 Authorization 헤더 도 메 인 을 보 내 서버 에 인증 을 요청 할 때 서버 응답 헤더 에 이 헤더 도 메 인 이 포 함 됩 니 다. eg: WWW - Authenticate: Basic realm = "Basic Auth Test!"  //서버 가 요청 자원 에 대해 기본 검증 체 제 를 사용 하고 있 음 을 알 수 있다.
2. Python 3.4 파충류 프로 그래 밍
1. 첫 번 째 예 를 들 어 우 리 는 간단 한 파충류 로 다른 사람의 홈 페이지 를 기어 올 라 가 야 한다.
4. 567913. 이것 은 기어 온 웹 페이지 출력 입 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第2张图片
이 가운데 무슨 일이 있 었 을 까? 피 들 러 를 열 어 보 자.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第3张图片
왼쪽 에 빨간색 으로 표 시 된 것 은 우리 가 이번 방문 에 성공 했다 는 것 을 나타 낸다. http 200 이다.
오른쪽 위 에 python 에서 생 성 된 요청 헤더 입 니 다. 아래 를 잘 모 르 겠 습 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第4张图片
아주 간단 한 헤더, 그리고 응답 이 돌아 온 html 를 다시 봅 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第5张图片
여기 서 응답 한 것 은 바로 우리 위 에 python 의 idle 에서 인쇄 된 웹 페이지 입 니 다!
2. 웹 브 라 우 저 로 위장
일부 웹 페이지, 예 를 들 어 로그 인 합 니 다. 만약 당신 이 브 라 우 저 에서 시작 하지 않 았 다 면, 이것 은 당신 에 게 응답 하지 않 았 을 것 입 니 다. 이때 우 리 는 스스로 메 시 지 를 써 야 합 니 다. 그리고 웹 서버 에 보 내야 합 니 다. 이때 그것 은 당신 이 정상 적 인 브 라 우 저 라 고 생각 합 니 다. 그러면 기어 갈 수 있 습 니 다!
4. 567913. 요청 헤 더 를 보 세 요. 바로 우리 가 설정 한 것 과 같 습 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第6张图片
돌아 온 것 은 같다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第7张图片
좀 더 복잡 한 요청 헤더:
#python3.4     
#         
#   Evankaka(  :http://blog.csdn.net/evankaka/)
import urllib.request
url = "http://www.douban.com/"
webPage=urllib.request.urlopen(url)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())

생 성 결과 보기:
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第8张图片
되 돌 릴 까요? 아니면:
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第9张图片
3. 사이트 에 올 라 간 사진
앞에서 우 리 는 홈 페이지 에 올 라 갈 수 있 습 니 다. 다음 단계 에 우 리 는 이 홈 페이지 의 각종 데 이 터 를 대량으로 자동 으로 다운로드 할 수 있 습 니 다 ~ 예 를 들 어, 여기 서 나 는 이 홈 페이지 의 모든 그림 을 다운로드 할 것 입 니 다.
4. 567913. 이것 은 실행 중인 과정 입 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第10张图片
컴퓨터 에 해당 하 는 폴 더 를 열 고 그림 을 보 세 요. 여 기 는 일부분 입 니 다!!
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第11张图片
실제 홈 페이지 의 그림
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第12张图片
4. 기어 와 서 가 져 온 메 시 지 를 보존한다.
#python3.4     
#         
#   Evankaka(  :http://blog.csdn.net/evankaka/)
import urllib.request
weburl = "http://www.douban.com/"
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
req = urllib.request.Request(url=weburl, headers=webheader)  
webPage=urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())

예 를 들 면:
4. 567913. 그리고 D 판 을 보 세 요.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第13张图片
NotePad 로 열기:
4. 567915. 응응, 맞 아. 홈 페이지 가 이미 내 려 왔 어.
3. Python 3. x 자동 로그 인
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第14张图片
일반적인 상황 에서 우 리 는 메 일과 비밀 번 호 를 입력 한 후에 로그 인 합 니 다. 이것 이 바로 양식 을 제출 하 는 내용 입 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第15张图片
python 3.4 코드 작성:
#python3.4     
#         
#   Evankaka(  :http://blog.csdn.net/evankaka/)
import urllib.request
weburl = "http://www.douban.com/"
webheader1 = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
webheader2 = {
    'Connection': 'Keep-Alive',
    'Accept': 'text/html, application/xhtml+xml, */*',
    'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
    #'Accept-Encoding': 'gzip, deflate',
    'Host': 'www.douban.com',
    'DNT': '1'
    }
req = urllib.request.Request(url=weburl, headers=webheader2)  
webPage=urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
print(type(webPage))
print(webPage.geturl())
print(webPage.info())
print(webPage.getcode())

결 과 를 살 펴 보 자.
이 때 돌아 오 는
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第16张图片
보 낸 요청 헤더
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第17张图片
돌아 온 신문 을 접수 하 다
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第18张图片
되 돌아 온 데 이 터 는 무슨 뜻 입 니까?
아주 간단 합 니 다. 코드 를 바 꾸 겠 습 니 다.
[置顶] Python3.x爬虫教程:爬网页、爬图片、自动登录_第19张图片

좋은 웹페이지 즐겨찾기