Gratter une page web qui nécessite qu'ils vous donner un cookie de session de la première

Je suis en train de gratter un fichier excel à partir d'un gouvernement "rôle d'équipage" de la base de données. Toutefois, l'URL, j'ai accès à ce fichier excel:

http://nrega.ap.gov.in/Nregs/FrontServlet?requestType=HouseholdInf_engRH&hhid=192420317026010002&actionVal=musterrolls&type=Normal

exige que j'ai un cookie de session à partir du site du gouvernement joint à la demande.

Comment pourrais-je récupérer le cookie de session avec une demande initiale de la page de destination (lorsqu'ils vous donnent le cookie de session) et ensuite l'utiliser pour frapper l'URL ci-dessus pour saisir notre fichier excel? Je suis sur Google App Engine à l'aide de Python.

J'ai essayé ceci:

import urllib2
import cookielib

url = 'http://nrega.ap.gov.in/Nregs/FrontServlet?requestType=HouseholdInf_engRH&hhid=192420317026010002&actionVal=musterrolls&type=Normal'


def grab_data_with_cookie(cookie_jar, url):
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
    data = opener.open(url)
    return data

cj = cookielib.CookieJar()

#grab the data 
data1 = grab_data_with_cookie(cj, url)
#the second time we do this, we get back the excel sheet.
data2 = grab_data_with_cookie(cj, url)

stuff2  = data2.read()

Je suis sûr que ce n'est pas la meilleure façon de le faire. Comment pourrais-je faire cela plus proprement, ou même en utilisant la demande de la bibliothèque?

Êtes-vous au courant de urlfetch sur App Engine? Si oui, quel est votre problème avec urlfetch? Si non, vérifiez la documentation et après revenir si vous avez d'autres questions.
Je préfère utiliser urllib2, httplib etc. "directement" plutôt que par urlfetch afin que je puisse plus facilement réutiliser ce code App Engine. Accordée que sur App Engine je pense que ces bibliothèques sont appel urlfetch de toute façon.
Question largement mises à jour, le problème était dû à un cookie, pas le reste du script.

OriginalL'auteur rd108 | 2012-03-17