• Martes 16 de Julio de 2024, 02:34

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Invisible

Páginas: [1]
1
PHP / [Reto] Bot http
« en: Domingo 25 de Diciembre de 2011, 14:52 »
Hay un tipo de retos incrementales que son más productivos que los retos habituales.

http://en.wikipedia.org/wiki/Cutting_contest
http://en.wikipedia.org/wiki/Guitar_battle

Esto es un reto a ese estilo, consiste en ir añadiendo algo al bot para hacerlo más parecido a una persona en la navegación (con cookies, con referer, con todo eso), además para que sea más fácil indicarle los parámetros que tiene que rellenar (por ejemplo muchos formularios tienen campos hidden, podría rellenarlos él mismo), para que sea más fácil parsear el html después, para que sea más fácil usar proxies... el límite lo pone vuestra imaginación.

Creo que puede ser un reto interesante, entretenido, productivo y del que todos saquemos el divertirnos, un código interesante y aprender y hacer algo útil. Vosotros diréis.

Aquí tenéis un ejemplo de cómo podría empezarse, veremos si alguien continua o no, en unos días pondré una mejora si nadie se anima, y con eso espero que ya sí se anime alguien.

Código: PHP
  1. class PHPBot {
  2.  
  3.     function PHPBot (){
  4.       $this->ch = curl_init();
  5.       $ch = $this->ch;
  6.       curl_setopt($ch, CURLOPT_HEADER, 1); // Include headers in response or not
  7.       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return (don't print) answer of exec
  8.       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
  9.       curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Isn't this great?
  10.       curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7'));      
  11.     }
  12.    
  13.     private function act($url, $params = false){
  14.       $ch = $this->ch;
  15.       curl_setopt($ch, CURLOPT_URL, $url);
  16.       if ($params != false){
  17.         curl_setopt($ch, CURLOPT_POSTFIELDS, $this->myurlencode($params));
  18.         curl_setopt($ch, CURLOPT_POST, 1);
  19.       }
  20.       else
  21.         curl_setopt($ch, CURLOPT_POST, 0);
  22.       $r = curl_exec($ch);
  23.       return $r;
  24.     }
  25.    
  26.     private function myurlencode($dict){
  27.       $r = "";
  28.       foreach($dict as $key => $value)
  29.         $r = $r.urlencode($key).'='.urlencode($value).'&';
  30.       return $r;
  31.     }
  32.    
  33.     function get ($url){
  34.       return $this->act($url);
  35.     }
  36.    
  37.     function post($url, $params){
  38.       return $this->act($url, $params);
  39.     }
  40.  
  41.   }

2
Python / procesar html
« en: Domingo 29 de Mayo de 2011, 13:22 »
Hola.

Quiero procesar html en python, no estoy segura de si quiero pasarlo a objetos python como con amara, si quiero usar xml.dom que viene ya de serie con python o si quiero usar xquery o xpath para extraer los valors.   :unsure:

De lo que estoy segura es de que no quiero aprender las cuatro cosas para luego ver que no me vale, o que otra es mejor o que he perdido el tiempo, o que no se. <_<  

¿que es lo mejor y lo que deberia aprender?  :huh:

Quiero algo que sea facil, estandar y potente. Lo quiero todo   ^_^

GRacias!!

PD: ah!!    :ouch:  uso python3, amara no me vale por eso, pero puede que haya otras cosas iguales  :huh:

3
Python / crawler http
« en: Miércoles 20 de Abril de 2011, 23:43 »
Hola,

Quiero hacer un bot http, pero a la primera de cambio, en cuanto he intentado hacer login en un sitio, ya no he podido seguir, algo falla y no se que es.

Este es el bot, muy simple, aunque estoy muy orgullosa de lo que llevo :D

Código: Python
  1. import http.client, urllib.parse
  2. from http import cookies
  3. from re import findall
  4.  
  5. class CrawlerGeneral ():
  6.   def __init__(self):
  7.     self.logininfo = []
  8.     self.baseheaders = {"User-Agent":"Mozilla/5.0 (Windows; en-US; XP) Gecko/20101028 Firefox/3.5.15",
  9.                         "Accept": "*/*", "Accept-Language":"en-us,en;q=0.5",
  10.                         "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7"}
  11.     self.cookies = cookies.SimpleCookie()
  12.     self.referer = ''
  13.        
  14.   def _act(self, url, method, params={}):
  15.     headers = self.baseheaders.copy()
  16.     headers['Referer'] = self.referer
  17.     headers['Cookie'] = self.cookies.output(header='', sep=';')
  18.     self.referer = url
  19.     if(url[:7] == 'htt'+'p://'):
  20.       url = url[7:]
  21.       safe = False
  22.     elif (url[:8] == 'htt'+'ps://'):
  23.       url = url[8:]
  24.       safe = True
  25.     else:
  26.       self.error("I don't like the protocol, I don't know how to handle this.n" + url)
  27.     (baseurl, extendedurl) = url.split('/', 1)
  28.     extendedurl = '/' + extendedurl
  29.     params = urllib.parse.urlencode(params)
  30.     conn = http.client.HTTPConnection(baseurl) if not safe else http.client.HTTPSConnection(baseurl)
  31.     conn.request(method, extendedurl, params, headers)
  32.     resp = conn.getresponse()
  33.     return self._processResponse(resp)
  34.  
  35.   def _processResponse(self, resp):
  36.     data = resp.read()
  37.     headers = resp.getheaders()
  38.     data = bytes.decode(data)
  39.     for (k, v) in headers:
  40.       if k == 'Set-Cookie':
  41.         self.cookies.load(v)
  42.     return (headers, data)
  43.  
  44.   def post(self, url, params):
  45.     realparams = urllib.parse.urlencode(params)
  46.     return self._act(url, 'POST', params)
  47.  
  48.   def get(self, url):
  49.     return self._act(url, 'GET')
  50.  

Esto es lo que intento hacer para que haga login:

Código: Python
  1. from crawlergeneral import CrawlerGeneral
  2. from re import findall
  3. cg = CrawlerGeneral()
  4. (headers, data) = cg.get('htt'+'p://foros.solocodigo.com/ucp.php?mode=login')
  5. sid = findall('type="hidden" name="sid" value="([^"]+)"', data)[0]
  6. (headers, data) = cg.post('htt'+'p://foros.solocodigo.com/ucp.php?mode=login', {'username=':'Invisible','password':'password', 'sid':sid, 'redirect': 'index.php', 'login':'Identificarse'})
  7. print(data)
  8.  

Pero no funciona, y no se por que...

Necesito hacer login porque en algunos sitios la informacion que se muestra es distinta dependiendo de si haces login o no, este foro lo estoy usando para empezar, porque el login es simple en comparación con otros, creo :-

GRacias!!

Páginas: [1]