Précédent   Forum des professionnels en informatique > Autres langages > Python & Zope > Réseau/Web
Réseau/Web Forum d'entraide sur Python et le réseau/Web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 31/07/2008, 21h19   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Par défaut Utilisé un proxy HTTP et activer les cookies avec python

Bonsoir chère communauté!
Tout d'abord, je me présente, parce que je suis nouveau parmis vous

Je suis Sekler et je code en python depuis peu (1mois), j'ai l'ambition de faire un robot web qui irai chercher des informations sur le web.
Pour le moment, je me débrouille par trop mal, et google m'a bien aidé.

Mais là, je bloque .

Voici mon problème:

Pour mon crawler, je souhaite utiliser un proxy, ici, pas de problème:

Code :
1
2
3
4
5
6
7
8
 
proxy_info = { 'host' : '203.162.163.78', 'port' : 80}
# On créé un handler pour le proxy:
proxy_support = urllib2.ProxyHandler({"http" : "http://%(host)s:%(port)d" % proxy_info})
# On créé un opener utilisant ce handler:
opener = urllib2.build_opener(proxy_support)
# Puis on installe cet opener comme opener par défaut du module urllib2.
urllib2.install_opener(opener)
J'ai trouvé ceci sur le net.

Aussi, le site où j'essaye de me connecter requiert les cookies.

Je faisais donc ceci (avant de prendre un proxy):

Code :
1
2
3
4
 
# On active le support des cookies pour urllib2
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
Ensuite, pour ouvrir mes pages web, je faisais:

Code :
1
2
3
 
request = urllib2.Request("http://www.lesiteenquestion.net")
url = urlOpener.open(request)
Mais le problème est que je ne sais pas comment faire pour utiliser les cookies ET le proxy.

J'ai essayé des tonnes de truc mais rien à faire

Donc voilà, si vous avez de quoi m'aider, ça serait vraiment sympa. Merci beaucoup.
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2008, 12h30   #2
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
Tu dois chaîner tes 2 handlers lors de l'appel à build_opener.
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2008, 14h43   #3
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
Tu écris un robot dans quel but ?
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2008, 12h20   #4
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Citation:
Envoyé par mchk0123 Voir le message
Tu dois chaîner tes 2 handlers lors de l'appel à build_opener.

Excuse moi, je ne vois pas ce que vous voulez dire par là, pouvez-vous me copier/coller un code d'exemple svp?

J'écris ce bot dans le but de fournir des statistiques un site.
Il ira se connecter sur le site et stockera des informations comme:

Nombre de membres a chaque heure.
Evolution des statistiques, etc.

Mais à la base, c'est surtout pour "m'entrainer" à la création de bot, voir le fonctionnement, etc.
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2008, 13h35   #5
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
Documentation Python :

Citation:
build_opener( [handler, ...])

Return an OpenerDirector instance, which chains the handlers in the order given.
Code :
build_opener(proxy_support, cookie_processor)
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2008, 23h49   #6
Membre chevronné
 
Avatar de fred1599
 
Inscription : juillet 2006
Messages : 749
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 749
Points : 733
Points : 733
http://www.voidspace.org.uk/python/a...francais.shtml
__________________
Linux ubuntu 8.04 Aspire 5611ZWLMi Intel Core Duo 1,6 GHz
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 14h46   #7
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Merci pour votre aide.

J'ai une dernière question, y a-t-il un historique sous python?

Je m'explique:

Imaginons que je fasse:

urlOpener.open('http://www.site1.com/page1.php')
urlOpener.open('http://www.site1.com/page2.php')

Est-ce que quand j'arriverai sur http://www.site1.com/page2.php, l'historique de ma page précédente sera: http://www.site1.com/page1.php ?

Par exemple, pour un history.back en javascript.

Merci.
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 14h56   #8
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
A ma connaissance non, mais tu peut facilement en implémenter un dans une classe "Crawler" qui encapsulerait les appels à "urlOpener.open()" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
class Crawler:
    def __init__(self):
        self.hist = []
    def open(self, url):
        self.hist.append(url)
        urlOpener.open(url)
        ...
    def back(self):
        url = self.hist[-2]
        del self.hist[-2] ; del self.hist[-1]
        self.open(url)
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 15h35   #9
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Merci pour ton code mchk0123, mais avec ce code, est-ce que page2.php

Saura que ma page d'avant était page1.php ?
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 15h56   #10
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
Si j'ai bien compris tu veux que les scripts côté client (JavaScript ou autre) puissent s'exécuter comme dans un navigateur ?

Python n'a pas d'interpreteur JavaScript dans ses librairies par défaut, mais rien ne t'empêches d'en chercher une (en Py ou C/C++), de parser la page récupérée + liens externes, et d'assurer la liaison entre ton Crawler et l'interpreteur.

Ce n'est pas une solution facile ni rapide.

Bon courage.
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 16h09   #11
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Non, ce n'est pas ceci. Je vais mieux m'expliquer:



Je souhaite ouvrir une page qui est:

http://www.site.com/attaque.php?id=123

Seulement, cette page vérifie d'ou l'on vient avec un:

$_SERVER["HTTP_REFERER"]

Si je ne viens pas de la page:

http://www.site.com/joueur.php?id=123

Alors l'attaque sera annulée et je serai redirigé vers:

http://www.site.com/joueur.php?id=123

Je souhaite donc ouvrir:


http://www.site.com/joueur.php?id=123

puis:

http://www.site.com/attaque.php?id=123

Mais le HTTP_REFERER ne semble pas voir de quelle page je provient.

J'espère avoir bien expliqué :s

merci
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 17h54   #12
Membre chevronné
 
Avatar de mchk0123
 
Inscription : janvier 2007
Messages : 816
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 816
Points : 779
Points : 779
Ah ! Tu veux jouer avec le referer ? Il fallait le dire plus tôt.

Après l'installation des handlers :

Code :
1
2
3
req = urllib2.Request(url)
req.add_header('Referer', url_referer)
f = urllib2.urlopen(req)
__________________
Avant de poster un message .
Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .
mchk0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2008, 01h54   #13
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 62
Points : 25
Points : 25
Tu peux utiliser mechanize qui fait plus navigateur web
badman_nx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2008, 15h10   #14
Invité de passage
 
Inscription : juillet 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 7
Points : 1
Points : 1
Merci beaucoup pour votre aide. C'est tres sympa!

MERCI
SeKler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 06h30.


 
 
 
 
Partenaires

Hébergement Web