python 테스트 웹 페이지

5469 단어 python
· 사고방식 소개: 
  시간 이 관건 입 니 다. 서버 의 시간 을 정확히 잡 을 수 있다 면 승산 이 크게 높 아 질 것 이 라 고 할 수 있 습 니 다. 서버 시간 을 어떻게 잡 습 니까?HTTP 를 통 해 서버 에 요청 할 때 응답 하 는 서버 헤더 파일 에 요청 한 웹 페이지 의 조건 정 보 를 포함 하고 있 는 것 을 알 고 있 습 니 다. 그 중 Date 헤더 도 메 인 에 관련 시간 이 기록 되 어 있 습 니 다. 이 를 통 해 cnblogs 의 서버 시간 을 얻 을 수 있 습 니 다.
#!/usr/bin/python
#-------------------------------------------------------------------------------
# Name:        GrabBook.py
# Purpose:
#
# Author:      Mr.Wid
#
# Created:     22-10-2012
# Copyright:   (c) Mr.Wid 2012
# Licence:     GNU GPL
#-------------------------------------------------------------------------------

import re
import time
import urllib
import urllib2
import httplib
import cookielib

username = 'mr_wid'               #     ,     
password = 'xxxxxxxx'             #    

#          
def en(x):
    return x.encode('utf-8')

def cn(x):
    return x.decode('utf-8')

#  cnblogs     
def GetCnblogsServerTime():
    """  cnblogs     
    GetCnblogsServerTime() -> list

    NOTE:                     
    """
    conn = httplib.HTTPConnection( 'www.cnblogs.com' )
    conn.request( 'GET', '/' )
    response = conn.getresponse()
    ts =  response.getheader('date')
    ltime = time.strptime( ts[5:25], '%d %b %Y %H:%M:%S' )         #                   
    serverTime =  time.strftime( '%H:%M:%S',
        time.localtime(time.mktime(ltime)+ 8*3600 )).split(':')    # GMT                 , -> [ hour, minute, second ]
    return serverTime


#     
def cnblogs_login():
    """     
    cnblogs_login() -> None
    """
    params_post = urllib.urlencode({
        '__EVENTTARGET': '',
        '__EVENTARGUMENT': '',
        '__VIEWSTATE': r'/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt',
        '__EVENTVALIDATION': r'/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05',
        'tbUserName':en(username),
        'tbPassword':en(password),
        'btnLogin':en('  ')
})
    cookie=cookielib.CookieJar()
    opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    urllib2.install_opener(opener)
    login_response=urllib2.urlopen('http://passport.cnblogs.com/login.aspx?',params_post)

#         
def PuhsishContent( content ):
    """         
    PuhsishContent( string content ) -> None
    """
    comment_post = urllib.urlencode({
        '__VIEWSTATE':en('/wEPDwUJNDYwODU2NjU1ZGQ='),
        'txbComment': en(content),
        'btnSubmint': en('    ')
    })
    page = urllib2.urlopen( r'http://m.cnblogs.com/mobileAddComment.aspx?id=101461&entry=2733027', comment_post )
    data = page.read()
    page.close()
    print cn( data )

#    
def PuhsishContentInTime():
    luckHour = [ 10, 12, 14, 16, 18, 20 ]        #       
    cnblogs_login()                                 #     
    while True:
        serverTime = GetCnblogsServerTime()         #       
        print serverTime
        if int(serverTime[0]) in luckHour and int(serverTime[1]) == 59:     #          59 59      
            for i in range( int(serverTime[2]), 60 ):    #         
           time.sleep(1)
            time.sleep(0.75)                    # 59 59 750         ,         , sleep      
            PuhsishContent( '       ~     ......' )
            print '      ,          55       ,   ...'
            time.sleep(55 * 60)                 #  55  ,       ,     
    #time.sleep(1)     #  1         


#      
PuhsishContentInTime()          #             ,           !

 ... 에 있다
 time.sleep(0.75)                    #59 59    750       ,         , sleep    

이 줄 은 스스로 조절 할 수 있 는 밀리초 수 이 며, 입력 소 수 는 밀리초 급 을 나타 낸다.
 
알림: 여 기 는 while True 의 순환 을 사 용 했 습 니 다. 가 져 오 는 시간 에 많은 요청 이 발생 할 수 있 습 니 다. cnblogs 의 일정 시간 동안 요청 수량 이 제한 되 어 있 으 면 while True 에 time. sleep (1) 을 추가 하여 1 초 쉬 었 다가 서버 시간 을 가 져 올 수 있 습 니 다. 책 을 빼 앗 는 동작 수행 에 큰 영향 을 주지 않 습 니 다. 예제 코드 에 서 는 이 문장 을 추가 하 였 으 나 주석 을 달 았 습 니 다.
#time.sleep(1)   ##  1         

 
이렇게 하면 대량의 요청 이 발생 할 수 있 습 니 다. 주석 이 떨 어 지 는 이 유 는 1 초 에 몇 번 의 요청 이 발생 하 는 지 편리 하 게 볼 수 있 기 때 문 입 니 다. 즉, 1 초 에 서버 시간 과 교정 하 는 빈 도 를 편리 하 게 볼 수 있 기 때 문 입 니 다. wid 는 평균 1 초 에 15 번 정도 교정 하여 시간 이 서버 와 동기 화 되 는 것 을 확보 하고 나머지 는 네트워크 의 지연 문제 만 있 습 니 다.
 
출처:http://www.cnblogs.com/mr-wid/archive/2012/10/22/2734695.html

좋은 웹페이지 즐겨찾기