elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Python (Moderador: Danielㅤ)
| | |-+  [python] crawler http
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [python] crawler http  (Leído 4,185 veces)
lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
[python] crawler http
« en: 20 Abril 2011, 23:43 pm »

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
  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')

Esto es lo que intento hacer para que haga login:

Código
  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=%2526quot%253Bsid%2526quot%253B 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)

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!!


« Última modificación: 20 Abril 2011, 23:45 pm por lnvisible » En línea

.:Swik:.

Desconectado Desconectado

Mensajes: 32


Ver Perfil WWW
Re: [python] crawler http
« Respuesta #1 en: 21 Abril 2011, 12:35 pm »

Código
  1. import urllib2
  2. from urllib import urlencode
  3.  
  4. diccionario={'user':'swik','passwrd':'pass','cookielength':'9000'}
  5.  
  6. cookie = urllib2.HTTPCookieProcessor()
  7.  
  8. opener = urllib2.build_opener(cookie)
  9. urllib2.install_opener(opener)
  10.  
  11. datos = urlencode(diccionario)
  12.  
  13. direc = urllib2.urlopen('direccion del login', datos)
  14.  
  15. print direc.read()
  16. direc.close()

asi?


« Última modificación: 21 Abril 2011, 12:41 pm por .:Swik:. » En línea

lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: [python] crawler http
« Respuesta #2 en: 21 Abril 2011, 15:13 pm »

Creo que no me vale, urllib2 no está en python 3, no parece manejar el referer y desde luego ese codigo no funcionaría porque para mandar los datos del formulario hay un campo hidden con el sid, por eso tengo que hacer get y luego post.

Intuyo que si lo pasara a python3, arreglara el referer o no, al final tendría el mismo problema, no funcionaría y no sabría por qué.
En línea

lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: [python] crawler http
« Respuesta #3 en: 23 Abril 2011, 05:55 am »

Así es, pasa lo mismo.

Código
  1. #!/usr/bin/env python3
  2. import urllib.request, urllib.parse
  3.  
  4. class CrawlerGeneral ():
  5.  def __init__(self):
  6.    self.headers = [("User-Agent", "Mozilla/5.0 (Windows; en-US; XP) Gecko/20101028 Firefox/3.5.15"),
  7.                    ("Accept", "*/*"), ("Accept-Language":"en-us,en;q=0.5"),
  8.                    ("Accept-Encodingg", "gzip,deflate"), ("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7")]
  9.    self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
  10.    self.referer = ''
  11.  
  12.  def open(self, url, params = None):
  13.    self.opener.addheaders = self.headers + [('Referer', self.referer)]
  14.    self.referer = url
  15.    if not params is None:
  16.      params = bytes(urllib.parse.urlencode(params), 'utf-8')
  17.    resp = self.opener.open(url, params)
  18.    return resp.read().decode('utf-8')


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

Puede que alguien se anime ahora que el código es más corto  :¬¬
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
manual de vb6 by night crawler
Programación Visual Basic
krackwar 0 2,097 Último mensaje 25 Abril 2008, 21:05 pm
por krackwar
Crawler Put Analizer , Primera BETA!! [PYTHON]
Nivel Web
afdlkglfgfdgfhgf 1 3,326 Último mensaje 11 Enero 2012, 18:42 pm
por afdlkglfgfdgfhgf
[Python] Consulta - Creación CRAWLER
Python
criskapunk 4 15,809 Último mensaje 14 Junio 2012, 09:57 am
por adastra
[APORTE]Web-crawler Python
Scripting
Señor X 0 4,432 Último mensaje 20 Noviembre 2014, 17:53 pm
por Señor X
HTTP en Python
Scripting
SDCC 1 2,661 Último mensaje 29 Noviembre 2019, 21:38 pm
por retr02332
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines