2009-12-22 3 views
0

내가 가져 오는 테스트 사이트가 있습니다. 사이트는 쿠키뿐만 아니라 POST 방법을 사용합니다. (쿠키가 중요하다고 확신하지는 않지만, 쿠키가 있다고 생각하는 경향이 있습니다.)게시 및 쿠키를 사용하여 여러 페이지를 가져 오는 python

앱은 다음 페이지를 생성하기위한 "다음 버튼"과 함께 페이지를 제공합니다. 필자는 LiveHttpHeaders/Firefof를 사용하여 게시 데이터가 쿼리에 있어야하는지, 쿠키가 설정되는지를 확인했습니다. 쿠키가 브라우저에 의해 허용되면 페이지가 작동하지 않는다는 것도 확인했습니다.

나는 내가 뭘 놓쳤는 지 알아 내고 싶다. 내 테스트에서 망쳐 버렸다. 샘플 코드는 가져 오려고하는 첫 번째 및 두 번째 페이지에 대한 쿼리/게시물 데이터를 제공합니다.

어떤 생각/의견을 부탁드립니다

내가 그물뿐만 아니라 triedn 많은 다른 가능한 시도를 검색 한, 그래서 나는 간단하게 뭔가를 놓치고 있다는 확신 ... ..

#!/usr/bin/python 

#test python script 
import re 
import urllib 
import urllib2 
import sys, string, os 
from mechanize import Browser 
import mechanize 
import cookielib    
######################## 
# 
# Parsing App Information 
######################## 

# datafile 

cj = "p" 
COOKIEFILE = 'cookies.lwp' 
#cookielib = 1 

urlopen = urllib2.urlopen 
#cj = urllib2.cookielib.LWPCookieJar()  
cj = cookielib.LWPCookieJar()  
#cj = ClientCookie.LWPCookieJar()  
Request = urllib2.Request 
br = Browser() 

if cj != None: 
    print "sss" 
#install the CookieJar for the default CookieProcessor 
    if os.path.isfile(COOKIEFILE): 
     cj.load(COOKIEFILE) 
     print "foo\n" 
    if cookielib: 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
     urllib2.install_opener(opener) 
     print "foo2\n" 

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
values1 = {'name' : 'Michael Foord', 
      'location' : 'Northampton', 
      'language' : 'Python' } 
headers = { 'User-Agent' : user_agent } 



if __name__ == "__main__": 
# main app 

    baseurl="https://pisa.ucsc.edu/class_search/index.php" 
    print "b = ",baseurl 
    print "b = ",headers 
    query="action=results&binds%5B%3Aterm%5D=2100&binds%5B%3Areg_status%5D=O&binds%5B%3Asubject%5D=&binds%5B%3Acatalog_nbr_op%5D=%3D&binds%5B%3Acatalog_nbr%5D=&binds%5B%3Atitle%5D=&binds%5B%3Ainstr_name_op%5D=%3D&binds%5B%3Ainstructor%5D=&binds%5B%3Age%5D=&binds%5B%3Acrse_units_op%5D=%3D&binds%5B%3Acrse_units_from%5D=&binds%5B%3Acrse_units_to%5D=&binds%5B%3Acrse_units_exact%5D=&binds%5B%3Adays%5D=&binds%5B%3Atimes%5D=&binds%5B%3Aacad_career%5D=" 


    request = urllib2.Request(baseurl, query, headers) 
    response = urllib2.urlopen(request) 

    print "gggg \n" 
    #print req 
    print "\n gggg 555555\n" 

    print "res = ",response 
    x1 = response.read() 
    #x1 = res.read() 
    print x1 
    #sys.exit() 

    cj.save(COOKIEFILE) # resave cookies 
    if cj is None: 
     print "We don't have a cookie library available - sorry." 
     print "I can't show you any cookies." 
    else: 
     print 'These are the cookies we have received so far :' 
     for index, cookie in enumerate (cj): 
      print index, ' : ', cookie 

    cj.save(COOKIEFILE) 

    print "ffgg \n" 
    for index, cookie in enumerate (cj): 
     print index, ' : ', cookie 


    #baseurl ="http://students.yale.edu/oci/resultList.jsp" 
    baseurl="https://pisa.ucsc.edu/class_search/index.php" 

    query="action=next&Rec_Dur=100&sel_col%5Bclass_nbr%5D=1&sel_col%5Bclass_id%5D=1&sel_col%5Bclass_title%5D=1&sel_col%5Btype%5D=1&sel_col%5Bdays%5D=1&sel_col%5Btimes%5D=1&sel_col%5Binstr_name%5D=1&sel_col%5Bstatus%5D=1&sel_col%5Benrl_cap%5D=1&sel_col%5Benrl_tot%5D=1&sel_col%5Bseats_avail%5D=1&sel_col%5Blocation%5D=1" 

    request = urllib2.Request(baseurl, query, headers) 
    response = urllib2.urlopen(request) 

    print "gggg \n" 
    #print req 
    print "\n gggg 555555\n" 

    print "res = ",response 
    x1 = response.read() 
    #x1 = res.read() 
    print x1 
    sys.exit() 


    req = Request(baseurl, query, headers) 
    print "gggg \n" 
    #print req 
    print "\n gggg 555555\n" 
    #br.open(req) 

    res = urlopen(req) 
    print "gggg 000000000000\n" 
    x1 = res.read() 
    print x1 


    sys.exit() 

어떤 생각/포인터 주셔서 감사합니다 ...

그리고 예 .. 알고 있습니다 .. 스크립트/테스트는 정말 나빠요!

-tom

+0

무엇이 잘못 되었나요? 작동하지 않는 것은 무엇입니까? 예, 이것은 정말 나쁜 코드이지만 어떤 오류가 발생합니까? 페이지를 가져 오는 경우 무엇이 잘못 되었나요? –

+0

안녕하세요 ... urllib/cookie/referer가 제대로 작동하지 않을 수 있습니다. 마지막으로 pycurl을 사용하여 페이지의 데이터 가져 오기/추출을 수행하도록 전환했습니다. 감사합니다. –

답변

0

정말 잘못 될지 잘 모르겠습니다. 도움이되지는 않지만 다른 방법이 될 수 있습니다.

첫 번째 페이지 제출마다 테이블 행을 연 다음 쿠키에 rowId 만 유지하고 후속 액세스 권한이있는 행에 추가하십시오.

tf.

관련 문제