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:
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?
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
Vous devez vous connecter pour publier un commentaire.
À l'aide de les demandes c'est une tâche triviale:
Ne pouvait pas obtenir que cela fonctionne, malheureusement. J'ai essayé r1 = demandes.get(url), r2 = demandes.get(url,cookies=r1.les cookies), mais je serai de retour la "page d'atterrissage" dans r2.texte qui veut dire que je ne suis pas connecté, apparemment. L'amour de cette bibliothèque si, et ressemble à urllib3 est maintenant fonctionnel dans App Engine bac à sable.
Mise à jour, ai eu de travail. Ne pas modifier le code, doit avoir été plus variable d'environnement crud raté le test. Merci!!!!
Il semble Affiche Originale souhaite utiliser des cookies de session pour les demandes suivantes. Avec les Demandes de la bibliothèque vous l'avez suggéré, ce qui peut être accompli à l'aide de Session() des objets: docs.python-requests.org/en/master/user/advanced
Je reçois
<RequestsCookieJar[]>
sur Python3OriginalL'auteur Burhan Khalid
Utilisant des cookies, et
urllib2
:Vous pouvez utiliser la même ouverture pour plusieurs connexions:
Ou de l'installer dans le monde entier:
Dans ce dernier cas, le reste du code est le même avec ou sans l'utilisation de cookies support:
OriginalL'auteur jfs