2009-12-22 3 views
0

J'ai un site de test que je récupère. Le site utilise la méthode POST, ainsi que les cookies. (Pas sûr que les cookies sont critiques, mais je suis enclin à penser qu'ils sont ..)python aller chercher plusieurs pages en utilisant la publication et les cookies

L'application présente une page, avec un "bouton suivant" pour générer les pages suivantes. J'ai utilisé LiveHttpHeaders/Firefof pour déterminer ce que les données de publication devraient être dans la requête, ainsi que le fait que les cookies sont en cours de définition. J'ai également vérifié que la page ne fonctionne pas si les cookies sont dosés par le navigateur. J'essaie de comprendre ce que j'ai raté/foiré dans mon test. L'exemple de code présente les données de requête/post pour la première et la seconde page que j'essaie d'extraire.

J'ai cherché sur le net, ainsi que de nombreuses triedn différentes tentatives possibles, donc je suis sûr que je manque quelque chose de simple ..

Toutes les pensées/commentaires sont appréciés ..

#!/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() 

merci pour toutes les pensées/pointeurs ...

et ouais .. je sais .. le script/test est vraiment mauvais!

-Tom

+0

Qu'est-ce qui ne va pas? Qu'est-ce qui ne fonctionne pas? Oui, c'est vraiment un mauvais code, mais quelle erreur obtenez-vous? Si vous obtenez des pages, qu'est-ce qui ne va pas? –

+0

hi ... n'a jamais pu faire fonctionner correctement urllib/cookie/referer. finalement passé à l'aide de pycurl pour accomplir l'extraction de données/extraction de la page. grâce à tous! –

Répondre

0

Je ne suis vraiment pas sûr de ce qui va mal. Il peut ne pas être utile, mais d'une autre manière:

Ouvrez une ligne de table pour chaque première page, puis conservez uniquement le rowId dans le cookie et ajoutez-le à la ligne avec les accès suivants.

tf.

Questions connexes