Autor
|
Tema: [python] crawler http (Leído 4,140 veces)
|
lnvisible
Desconectado
Mensajes: 527
|
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 import http.client, urllib.parse from http import cookies from re import findall class CrawlerGeneral (): def __init__(self): self.logininfo = [] self.baseheaders = {"User-Agent":"Mozilla/5.0 (Windows; en-US; XP) Gecko/20101028 Firefox/3.5.15", "Accept": "*/*", "Accept-Language":"en-us,en;q=0.5", "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7"} self.cookies = cookies.SimpleCookie() self.referer = '' def _act(self, url, method, params={}): headers = self.baseheaders.copy() headers['Referer'] = self.referer headers['Cookie'] = self.cookies.output(header='', sep=';') self.referer = url if(url[:7] == 'htt'+'p://'): url = url[7:] safe = False elif (url[:8] == 'htt'+'ps://'): url = url[8:] safe = True else: self.error("I don't like the protocol, I don't know how to handle this.\n" + url) (baseurl, extendedurl) = url.split('/', 1) extendedurl = '/' + extendedurl params = urllib.parse.urlencode(params) conn = http.client.HTTPConnection(baseurl) if not safe else http.client.HTTPSConnection(baseurl) conn.request(method, extendedurl, params, headers) resp = conn.getresponse() return self._processResponse(resp) def _processResponse(self, resp): data = resp.read() headers = resp.getheaders() data = bytes.decode(data) for (k, v) in headers: if k == 'Set-Cookie': self.cookies.load(v) return (headers, data) def post(self, url, params): realparams = urllib.parse.urlencode(params) return self._act(url, 'POST', params) def get(self, url): return self._act(url, 'GET')
Esto es lo que intento hacer para que haga login: from crawlergeneral import CrawlerGeneral from re import findall cg = CrawlerGeneral() (headers, data) = cg.get('htt'+'p://foros.solocodigo.com/ucp.php?mode=login') sid = findall('type="hidden" name=%2526quot%253Bsid%2526quot%253B value="([^"]+)"', data)[0] (headers, data) = cg.post('htt'+'p://foros.solocodigo.com/ucp.php?mode=login', {'username' : 'Invisible', 'password': 'password', 'sid':sid, 'redirect': 'index.php', 'login':'Identificarse'}) 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:.
|
import urllib2 from urllib import urlencode diccionario={'user':'swik','passwrd':'pass','cookielength':'9000'} cookie = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(cookie) urllib2.install_opener(opener) datos = urlencode(diccionario) direc = urllib2.urlopen('direccion del login', datos) print direc.read() direc.close()
asi?
|
|
« Última modificación: 21 Abril 2011, 12:41 pm por .:Swik:. »
|
En línea
|
|
|
|
lnvisible
Desconectado
Mensajes: 527
|
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
Mensajes: 527
|
Así es, pasa lo mismo. #!/usr/bin/env python3 import urllib.request, urllib.parse class CrawlerGeneral (): def __init__(self): self.headers = [("User-Agent", "Mozilla/5.0 (Windows; en-US; XP) Gecko/20101028 Firefox/3.5.15"), ("Accept", "*/*"), ("Accept-Language":"en-us,en;q=0.5"), ("Accept-Encodingg", "gzip,deflate"), ("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7")] self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor()) self.referer = '' def open(self, url, params = None): self.opener.addheaders = self.headers + [('Referer', self.referer)] self.referer = url if not params is None: params = bytes(urllib.parse.urlencode(params), 'utf-8') resp = self.opener.open(url, params) return resp.read().decode('utf-8')
from crawlergeneral import CrawlerGeneral from re import findall cg = CrawlerGeneral() data = cg.open('http://foros.solocodigo.com/ucp.php?mode=login') sid = findall('type="hidden" name="sid" value="([^"]+)"', data)[0] data = cg.open('http://foros.solocodigo.com/ucp.php?mode=login', {'username=':'Invisible','password':'password', 'sid':sid, 'redirect': 'index.php', 'login':'Identificarse'}) print(cg.open('http://foros.solocodigo.com/'))
Puede que alguien se anime ahora que el código es más corto
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
manual de vb6 by night crawler
Programación Visual Basic
|
krackwar
|
0
|
2,094
|
25 Abril 2008, 21:05 pm
por krackwar
|
|
|
Crawler Put Analizer , Primera BETA!! [PYTHON]
Nivel Web
|
afdlkglfgfdgfhgf
|
1
|
3,313
|
11 Enero 2012, 18:42 pm
por afdlkglfgfdgfhgf
|
|
|
[Python] Consulta - Creación CRAWLER
Scripting
|
criskapunk
|
4
|
15,756
|
14 Junio 2012, 09:57 am
por adastra
|
|
|
[APORTE]Web-crawler Python
Scripting
|
Señor X
|
0
|
4,364
|
20 Noviembre 2014, 17:53 pm
por Señor X
|
|
|
HTTP en Python
Scripting
|
SDCC
|
1
|
2,626
|
29 Noviembre 2019, 21:38 pm
por retr02332
|
|