[SOLUCIONADO] Urls + python

Iniciado por Hu0r, Marzo 02, 2013, 02:15:23 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 02, 2013, 02:15:23 AM Ultima modificación: Septiembre 09, 2014, 08:47:32 PM por Expermicid
Hola, leí los tutoriales de Python de esta sección y hasta ahí todo bien. Pero no he encontrado nada que explique el manejo de Urls y Python. Me explico, si quiero chequear una url en python para diversas cosas, ¿qué comandos debo usar? Tienen algún tutorial donde expliquen esto? :D

Fundamentalmente quiero hacer algo como esto. Deseo hacer una búsqueda de temas de un usuario. Primero, tengo la url del perfil de un usuario: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, donde XXX es el id del usuario, y posteriormente buscar en varios directorios y subdirectorios (de la misma web, obvio) si el username es el creador de la entrada.

Dentro de mi cabeza es algo así:

- Introducir el id del usuario.
- Buscar los por los directorios ya listados.
- Dentro de cada directorio, buscar en subdirectorios.
- Mostrar la cantidad de entradas publicadas por el usuario (quizá alguna búsqueda específica dentro del código de fuente, no sé).

Necesito documentación para hacer eso... Gracias de antemano!!

Hola,

Si lo que quieres es documentación, hechale un vistazo a las librerias No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Estas para las urls y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Estos para trabajar con el código que te devuelve la web.

Si tienes alguna duda más específica no dudes preguntar de nuevo.

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola,

Si lo que quieres es documentación, hechale un vistazo a las librerias No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Estas para las urls y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Estos para trabajar con el código que te devuelve la web.

Si tienes alguna duda más específica no dudes preguntar de nuevo.

Saludos!

Había leído sobre urllib2 y creo que no sirve para lo que busco :P. Leeré los demás, gracias. Cualquier cosa pregunto aquí!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Había leído sobre urllib2 y creo que no sirve para lo que busco :P. Leeré los demás, gracias. Cualquier cosa pregunto aquí!

Lo que quieres es abrir una url, así que  cualquiera de las dos librerias te sirve:

Código: python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
URL = "http://underc0de.org/foro/profile/Hu0r/"
print urllib.urlopen(URL).read()


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Marzo 02, 2013, 03:25:31 AM #4 Ultima modificación: Marzo 02, 2013, 03:40:33 AM por Hu0r
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Había leído sobre urllib2 y creo que no sirve para lo que busco :P. Leeré los demás, gracias. Cualquier cosa pregunto aquí!

Lo que quieres es abrir una url, así que  cualquiera de las dos librerias te sirve:

Código: python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
URL = "http://underc0de.org/foro/profile/Hu0r/"
print urllib.urlopen(URL).read()


Saludos!

Sí, pero quiero buscar dentro de ese código un tag determinado. Por ejemplo, tengo el tag:

Código: php
<a rel="nofollow" class="bigusername" href="http://sitio.com/miembro.php?u=XXXX"><font color="YYYYY"><strong>Hu0r</font></strong></a>


Entonces, la idea sería parsear y buscar dentro del code el tag <a>...</a> y que dentro de este busque el href=..../miembro.php?=XXXX (lo importante es el id). Y cuando lo encuentre lo almacene en un registro (+1). O podría cargarse toda la url: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta para buscarla, más fácil que andar para allá y para acá con la id.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Sí, pero quiero buscar dentro de ese código un tag determinado. Por ejemplo, tengo el tag:

Código: php
<a rel="nofollow" class="bigusername" href="http://sitio.com/miembro.php?u=XXXX"><font color="YYYYY"><strong>Hu0r</font></strong></a>


Entonces, la idea sería parsear y buscar dentro del code el tag <a>...</a> y que dentro de este busque el href=..../miembro.php?=XXXX (lo importante es el id). Y cuando lo encuentre lo almacene en un registro (+1).

Ahora entiendo mejor, y te acabas de responder, puedes usar como te dije en la primer respuesta HTMLParser o codear alguna expresión regular.

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Marzo 02, 2013, 06:43:07 PM #6 Ultima modificación: Marzo 02, 2013, 07:04:59 PM por Hu0r
Ya me leí toda la documentación e hice un par de cosas, pero me asaltan un par de dudas :P. Mira, el código (incompleto, recién lo primero) que tengo y que es verificar un id y el username:

Código: python

#!/usr/bin/python
# -*- coding: utf-8 -*-

print '''---------------------------------
Verificando usuario...
---------------------------------'''

user = input("Introduce el ID de tu usuario: ")

# Unir input(ID) con la url que carga urllib2
# ----------
# -----------

import urllib2
from BeautifulSoup import BeautifulSoup

url = 'http://sitio.com/member.php?u=XXXX'
data = urllib2.urlopen(url).read()
soup = BeautifulSoup(data)

for anchor in soup.findAll('h1'):
    if anchor('strong'):
      print "Bienvenido", anchor('strong')


Usé la librería BeautifulSoup porque me pareció más fácil de entender, y vaya que es así! Ahora dos dudas, lo primero es que, quiero introducir un entero que corresponderá al id del usuario, pero cómo hago que la url sea variable? Es decir, que a la url No tienes permitido ver los links. Registrarse o Entrar a mi cuenta se le agregue el entero que se le introdujo a través de input (quedando No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)? Y segundo, al introducir la id (en este caso, modificando la url) accedo al perfil del usuario y con BeautifulSoup parseo el html y encuentro el nombre de usuario, que está dentro de estos tags:

Código: python
<h1><font color="white"><strong>Zefidu</strong></font> ... </h1>


Pero lo que consigo con ese código es:

Código: php
Bienvenido [<strong>USERNAME</strong>]


Y claramente sólo quiero que diga "USERNAME".

Saludos y gracias!!

---------------------------

EDIT: Me respondo solo, sólo tenía que editar la línea de la URL como sigue:

Código: python
url = 'http://sitio.com/member.php?u=%d' % (user)


:P. Sigo sin saber aún lo del BeautifulSoup!

Hola,

Nunca he tocado BeautifulSoup pero parece que está regresando una lista, sólo cambia esta línea

Código: python
print "Bienvenido", anchor('strong')[0]


No debería mostrar los [ ], pero sí la etiqueta <strong> para eliminarla, puedes hacerlo con una expresión regular (muy sencilla para este caso) o con un simple split

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola,

Nunca he tocado BeautifulSoup pero parece que está regresando una lista, sólo cambia esta línea

Código: python
print "Bienvenido", anchor('strong')[0]


No debería mostrar los [ ], pero sí la etiqueta <strong> para eliminarla, puedes hacerlo con una expresión regular (muy sencilla para este caso) o con un simple split

Saludos!

Gracias, pude eliminar los corchetes ([...]), pero no he podido eliminar los tags. A todo esto, me explicas por qué con
  • se eliminaron los corchetes? Y depende del número? :O

Marzo 02, 2013, 09:46:37 PM #9 Ultima modificación: Marzo 02, 2013, 09:48:34 PM por 11Sep
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Gracias, pude eliminar los corchetes ([...]), pero no he podido eliminar los tags. A todo esto, me explicas por qué con
  • se eliminaron los corchetes? Y depende del número? :O
anchor('strong') te regresa una lista y al poner el [ 0 ] le indicas que regrese el primer elemento de la lista, sí depende del número, el número lo que hace es que trae el elemento de la lista que corresponde a esa posición (tomando en cuenta que el primer elemento es cero. También puedes usar números negativos, -1 correpondería al último elemento de la lista). Ahora si no colocas el [ 0 ] imprimiras la lista completa (todos los elementos) incluidos los [ ]

Para eliminar la etiqueta <strong> te dejo una expresión regular:

Código: python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

Var = "<strong>USERNAME</strong>"
Usuario = re.findall(r'<strong>(.*?)</strong>', Var)
print Usuario[0]


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Gracias, pude eliminar los corchetes ([...]), pero no he podido eliminar los tags. A todo esto, me explicas por qué con
  • se eliminaron los corchetes? Y depende del número? :O
anchor('strong') te regresa una lista y al poner el [ 0 ] le indicas que regrese el primer elemento de la lista, sí depende del número, el número lo que hace es que trae el elemento de la lista que corresponde a esa posición (tomando en cuenta que el primer elemento es cero. También puedes usar números negativos, -1 correpondería al último elemento de la lista). Ahora si no colocas el [ 0 ] imprimiras la lista completa (todos los elementos) incluidos los [ ]

Para eliminar la etiqueta <strong> te dejo una expresión regular:

Código: python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

Var = "<strong>USERNAME</strong>"
Usuario = re.findall(r'<strong>(.*?)</strong>', Var)
print Usuario[0]


Saludos!

Disculpa la ignorancia... Pero dónde iría eso? xD

Y sobre la librería urllib2, ¿cómo podría asignar que recorra más de una url? ¿Con un while?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Disculpa la ignorancia... Pero dónde iría eso? xD

Y sobre la librería urllib2, ¿cómo podría asignar que recorra más de una url? ¿Con un while?

A la varibale Var le debes asignar el string que te regresa anchor('strong')[0] y en Usuario queda el usuario sin la etiqueta <strong>

Puedes hacerlo con un while o también puedes guardar las urls en una lista y recorrerla con un for

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Disculpa la ignorancia... Pero dónde iría eso? xD

Y sobre la librería urllib2, ¿cómo podría asignar que recorra más de una url? ¿Con un while?

A la varibale Var le debes asignar el string que te regresa anchor('strong')[0] y en Usuario queda el usuario sin la etiqueta <strong>

Puedes hacerlo con un while o también puedes guardar las urls en una lista y recorrerla con un for

Saludos!

Trataré de digerir lo que me dices y te cuento. Te agradezco un montón tu tiempo y dedicación!!!  :D

No fue necesario usar la librería re. Bastaba con agregar

Código: python
 .string.strip()


Para eliminar el tag molesto. Sobre el while, ¿me echas una mano? No he podido combinar las librerías con el while, lo único que me quedó por hacer es agregar muchas urls aparte y muchos for, lo que implica que el código no es para nada limpio, sino hecho muy brutamente xD!

Onda la idea es si tengo la web

Código: python
sitio.com/?id=1&page=1


Avanzar en páginas, &ṕage=2, &page=3... hasta que encuentre una página que no exista (donde se muestra un error, 404) y termine el loop. El problema es que no he encontrado documentación para hacer esto -.-. No me gusta preguntar mucho, pero bueno...

Saludos!

Hola de nuevo, para lo que necesitas, tienes que hacer uso de la libreria httplib

Código: python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import httplib

Url = "/?id=1&page=%d"
Cont = 1

while True:
    Buff = Url % Cont
    Conn = httplib.HTTPConnection("www.sitio.com")
    Conn.request("GET", Buff)
    Resp = Conn.getresponse().status
    if Resp == 404:
        break
    else:
        print Cont, "Existe"
    Cont += 1


Por cierto, a veces las webs no regresan un 404 cuando no existe el archivo en el servidor, sino que regresan un 302 (por ejemplo el foro)

Y no te preocupes por preguntar que para eso estamos acá.

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Investigando y preguntando por acá y por allá, encontré lo que quería. Lo dejaré por si alguien lo quiere:

Código: python

#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib2
from BeautifulSoup import BeautifulSoup

pagenumber = 0
while(1):
    pagenumber = pagenumber +1
    url = 'somesite/cat?=188&paged=%d' % (pagenumber)
    try:
        page = urllib2.urlopen(url) 
        data = page.read()
        soup = BeautifulSoup(data)
        xa = soup.findAll('a', href=True)

        for web in xa:
            if web['href'].startswith('example'):
                print web['href']
        page.close()
    except IOError as e:
        break 



Es decir, si tienes una web del tipo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y quieres recorrer y parsear todas esos urls, lo haces con ese código. El parseo difiere dependiendo de lo que quieras.

Gracias por todo, tengo un par de dudas más, pero son más básicas y prefiero abrir otro thread. Se agradece la disposición (nuevamente).

Saludos!!!  :D