library - requests python
Extraiga la dirección IP de una cadena html(python) (6)
Así es como lo he hecho. Creo que es tan limpio
import re
import urllib2
def getIP():
ip_checker_url = "http://checkip.dyndns.org/"
address_regexp = re.compile (''/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}'')
response = urllib2.urlopen(ip_checker_url).read()
result = address_regexp.search(response)
if result:
return result.group()
else:
return None
get_IP () devuelve ip en una cadena o Ninguno
Puede sustituir a address_regexp por otras expresiones regulares si prefiere un análisis más preciso o puede cambiar el proveedor de servicios web.
Mis amigos,
Realmente quiero extraer una dirección IP simple de una cadena (en realidad un html de una línea) usando Python. Pero resulta que pasaron 2 horas y todavía no pude encontrar una buena solución.
>>> s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"
- ''165.91.15.131'' es lo que quiero!
Intenté usar expresiones regulares, pero hasta ahora solo puedo llegar al primer número.
>>> import re
>>> ip = re.findall( r''([0-9]+)(?:/.[0-9]+){3}'', s )
>>> ip
[''165'']
De hecho, no creo que tenga una comprensión firme de la expresión-reg y el código anterior se encontró y modificó desde cualquier otro lugar de la web.
¡Busca tu aporte e ideas!
Elimine su grupo de captura:
ip = re.findall( r''[0-9]+(?:/.[0-9]+){3}'', s )
Resultado:
[''165.91.15.131'']
Notas:
- Si está analizando HTML, puede ser una buena idea mirar BeautifulSoup .
- Su expresión regular coincide con algunas direcciones IP no válidas, como
0.00.999.9999
. Esto no es necesariamente un problema, pero debe ser consciente de ello y posiblemente manejar esta situación. Puede cambiar el+
a{1,3}
para una corrección parcial sin hacer que la expresión regular sea demasiado compleja.
La forma más fácil de encontrar la dirección IP desde el registro ...
s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"
info = re.findall(r''[/d.-]+'', s)
En [42]: info
Fuera [42]: [''165.91.15.131'']
Puede utilizar la siguiente expresión regular para capturar solo direcciones IP válidas
re.findall(r''/b25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?/.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?/.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?/.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?/b'',s)
devoluciones
[''165'', ''91'', ''15'', ''131'']
Puede utilizar las siguientes expresiones regulares para extraer una IP válida sin seguir los errores
1. Algunos detectaron 123.456.789.111
como IP válida
2. 127.0.00.1
no detectan 127.0.00.1
como IP válida
3.Algunos no detectan IP que comienzan con cero como 08.8.8.8
Así que aquí publico una expresión regular que funciona en todas las condiciones anteriores.
Nota: He extraído más de 2 millones de IP sin ningún problema con las siguientes expresiones regulares.
(?:(?:1/d/d|2[0-5][0-5]|2[0-4]/d|0?[1-9]/d|0?0?/d)/.){3}(?:1/d/d|2[0-5][0-5]|2[0-4]/d|0?[1-9]/d|0?0?/d)
import re
ipPattern = re.compile(''/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}'')
findIP = re.findall(ipPattern,s)
findIP contains [''165.91.15.131'']