Reppy comenzó de la falta de apoyo memoization en otros programas de análisis de robots.txt encontrados, y la falta de apoyo a Crawl-delay y del sitio en el robotparser incorporado.
juego
Este paquete es compatible con el RFC 1996, así como las funciones más implementados adicionales, como juego de comodín, rastreo de retardo, y mapas de sitio. Existen diferentes enfoques para la búsqueda y Permitir No permitir. Un enfoque consiste en utilizar la coincidencia más larga. Otra es la de utilizar la más específica. Este paquete elige seguir la directiva que es el más largo, el supuesto es que es el que es más específica - un término que es un poco difícil de definir en este contexto.
Uso
La forma más fácil de usar Reppy es justo preguntar si una URL o direcciones URL es / son permitidos:
Reppy importación
# Esto obtiene implícitamente robot.txt de example.com
reppy.allowed ('http://example.com/howdy')
# => True
# Ahora, se almacena en caché basado en cuando debe expirar (leer más en `Expiration`)
reppy.allowed ('http://example.com/hello')
# => True
# También soporta consultas por lotes
reppy.allowed (['http://example.com/allowed1', 'http://example.com/allowed2', 'http://example.com/disallowed'])
# => ['Http://example.com/allowed1', 'http://example.com/allowed2']
# consultas por lotes son incluso compatibles cruzando varios dominios (aunque recuperaciones no se hacen en paralelo)
reppy.allowed (['http://a.com/allowed', 'http://b.com/allowed', 'http://b.com/disallowed'])
# => ['Http://a.com/allowed', 'http://b.com/allowed']
Es bastante fácil de usar. El comportamiento por defecto es a buscarla para usted con urllib2
Reppy importación
# Hacer un objeto Reppy asociada a un dominio particular
r = reppy.fetch ('http://example.com/robots.txt')
pero sólo puede analizar la misma facilidad con una cadena que el que obtuvo.
urllib2 importación
data = urllib2.urlopen ('http://example.com/robots.txt') .leer ()
r = reppy.parse (datos)
Vencimiento
La principal ventaja de tener Reppy traiga el robots.txt para usted es que puede refetch automáticamente después de que haya expirado sus datos. Es completamente transparente para usted, por lo que no tienen ni siquiera para pensar en ello - sólo seguir utilizándolo como normal. O, si lo prefiere, puede configurar su propio tiempo a vivir, que tiene prioridad:
Reppy importación
r = reppy.fetch ('http://example.com/robots.txt')
r.ttl
# => 10800 (Cuánto tiempo para vivir?)
r.expired ()
# => Falso (¿Ha expirado?)
r.remaining ()
# => 10798 (¿Cuánto tiempo hasta que expire)
r = reppy.fetch ('http://example.com/robots.txt', ttl = 1)
# Espere 2 segundos
r.expired ()
# => True
Consultas
Reppy trata de mantener un registro de host para que usted no tenga que hacerlo. Esto se hace automáticamente cuando se utiliza buscarme, o puede ofrecer opcionalmente la url el que obtuvo desde la parse. Si lo hace, le permite proporcionar sólo la ruta al consultar. De lo contrario, debe proporcionar toda la url:
# Este es factible
r = reppy.fetch ('http://example.com/robots.txt')
r.allowed ('/')
r.allowed (['/ hola', '/ ¡Hola'])
# Y así es esto
data = urllib2.urlopen ('http://example.com/robots.txt') .leer ()
r = reppy.parse (datos, url = 'http: //example.com/robots.txt')
r.allowed (['/', '/ hola', '/ ¡Hola'])
# Sin embargo, no sabemos implícitamente que éstos son de dominio de
reppy.allowed (['/', '/ hola', '/ ¡Hola'])
Crawl-delay y sitemaps
Reppy también expone la no-RFC, pero ampliamente utilizado-Crawl-delay y sitemaps atributos. El rastreo de retardo se considera sobre una base de agente por usuario, pero los mapas de sitio son consideradas global. Si no se especifican, el retraso de rastreo es Ninguno y mapas de sitio es una lista vacía. Por ejemplo, si este es mi robots.txt:
User-agent: *
Crawl-delay: 1
Mapa del sitio: http://example.com/sitemap.xml
Mapa del sitio: http://example.com/sitemap2.xml
Entonces estos son accesibles:
con el archivo ('myrobots.txt', 'r') como f:
& Nbsp; r = reppy.parse (f.read ())
r.sitemaps
# => ['Http://example.com/sitemap.xml', 'http://example.com/sitemap2.xml']
r.crawlDelay
# => 1
User-Agent a juego
Puede proporcionar un agente de usuario de su elección para ir a buscar robots.txt, y luego la cadena de agente de usuario que partido es incumplido a lo que aparece antes de la primera /. Por ejemplo, si usted proporciona el agente de usuario como "MyCrawler / 1.0 ', entonces vamos a utilizar' MyCrawler 'como la cadena para que coincida contra User-agent. Las comparaciones entre mayúsculas y minúsculas, y no admiten comodines en User-Agent. Si este defecto no le conviene, puede proporcionar una alternativa:
# Esto coincidirá contra 'myuseragent' por defecto
r = reppy.fetch ('http://example.com/robots.txt', userAgent = 'MyUserAgent / 1.0 ")
# Esto coincidirá contra 'someotheragent' en vez
r = reppy.fetch ('http://example.com/robots.txt', userAgent = 'MyUserAgent / 1.0', 'userAgentString someotheragent' =)
Ruta-Matching
Juego Path soporta tanto * y $
Características
- memoization de robots.txt descabellada
- Vencimiento tomado de la Expira cabecera
- consultas por lotes
- agente de usuario configurable para ir a buscar robots.txt
- basándose automática re-cargar en la espiración
- Soporte para Crawl-delay
- Soporte para sitemaps
- juego Comodín
Requisitos
- Python
Comentarios que no se encuentran