Ecco due metodi, entrambi in Python, per loggare in un sito tramite uno script automatizzato per poter estrapolare dati da esso.
Un esempio del primo metodo, che usa la libreria mechanize:
(se non avete il nome del form potete mettere il valore “nr=0” per prendere il primo form della pagina).
import mechanize url='http://www.esempio.it/index.php' browser = mechanize.Browser() browser.open(url) browser.select_form(name="form1") #nome associato al form (bisogna visualizzarlo nella sorgente HTML) browser["username"] = 'USERNAME' #al posto di "username" dovete mettere il nome associato al campo vedendolo dalla sorgente HTML browser["password"] = 'PASSWORD'#al posto di "password" dovete mettere il nome associato al campo vedendolo dalla sorgente HTML browser.new_control("HIDDEN", "action", {}) control = browser.form.find_control("action") control.readonly = False browser["action"] = "login" browser.method = "POST" browser.action = url response = browser.submit() data=browser.open('http://www.esempio.it/contenuto.php').read() print data
Il secondo metodo (scritto da “tehryan”) usa le librerie urllib, urllib2 e cookielib ed è più efficace del primo, poichè ad esempio siti come facebook dispongono di un sistema che blocca mechanize impedendogli di loggare.
import urllib, urllib2, cookielib class Acc: jar = cookielib.CookieJar() cookie = urllib2.HTTPCookieProcessor(jar) opener = urllib2.build_opener(cookie) headers = { "User-Agent" : "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.14) Gecko/20080609 Firefox/2.0.0.14", "Accept" : "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,text/png,*/*;q=0.5", "Accept-Language" : "en-us,en;q=0.5", "Accept-Charset" : "ISO-8859-1", "Content-type": "application/x-www-form-urlencoded", "Host": "m.facebook.com" } def login(self, email, pwd): try: params = urllib.urlencode({'email': email,'pass':pwd,'login':'Log+In'}) req = urllib2.Request('http://m.facebook.com/login.php?m=m&refsrc=m.facebook.com%2F', params, self.headers) res = self.opener.open(req) html = res.read() except urllib2.HTTPError, e: print e.msg except urllib2.URLError, e: print e.reason[1] return False def fetch(self,url): req = urllib2.Request(url,None,self.headers) try: res = self.opener.open(req) except urllib2.URLError, e: print e.reason return res.read()