reppy começou de uma falta de apoio memoization em outros analisadores robots.txt encontradas, ea falta de apoio para Crawl-delay e Sitemap no robotparser built-in.
Combinando
Este pacote suporta a RFC 1996, bem como características comumente implementadas adicionais, como correspondência de curinga, crawl-delay, e sitemaps. Há diversidade de abordagens em correspondência Permitir e Proibir. Uma abordagem é usar a partida mais longa. Outro é a utilização o mais específico. Este pacote escolhe seguir a directiva que é a mais longa, partindo do princípio de que ele é o que é mais específico - um termo que é um pouco difícil de definir neste contexto.
Uso
A maneira mais fácil de usar reppy é apenas perguntar se uma url ou urls é / são permitidos:
reppy importação
# Este implicitamente procura robot.txt do example.com
reppy.allowed ('http://example.com/howdy')
# => True
# Agora, está em cache com base em quando o mesmo deveria terminar (leia mais em `Expiration`)
reppy.allowed ('http://example.com/hello')
# => True
# Ele também suporta consultas em lote
reppy.allowed (['http://example.com/allowed1', 'http://example.com/allowed2', 'http://example.com/disallowed'])
# => ['Http://example.com/allowed1', 'http://example.com/allowed2']
# consultas lote são ainda suportados atravessando diversos domínios (embora buscas não são feitas em paralelo)
reppy.allowed (['http://a.com/allowed', 'http://b.com/allowed', 'http://b.com/disallowed'])
# => ['Http://a.com/allowed', 'http://b.com/allowed']
É muito fácil de usar. O comportamento padrão é para buscá-lo para você com urllib2
reppy importação
# Fazer um objeto reppy associado a um domínio específico
r = reppy.fetch ('http://example.com/robots.txt')
mas você pode facilmente analisar uma seqüência de caracteres que você foi buscar.
urllib2 importação
data = urllib2.urlopen ('http://example.com/robots.txt') .read ()
r = reppy.parse (dados)
Expiração
A principal vantagem de ter reppy buscar o robots.txt para você é que ele pode buscar novamente automaticamente após a sua dados expirou. É completamente transparente para você, para que você não tem sequer a pensar nisso - basta continuar usando-o como normal. Ou, se você preferir, você pode definir seu próprio time-to-live, que tem precedência:
reppy importação
r = reppy.fetch ('http://example.com/robots.txt')
r.ttl
# => 10800 (Quanto tempo para viver?)
r.expired ()
# => False (Tem que expirou?)
r.remaining ()
# => 10798 (Quanto tempo até que expire)
r = reppy.fetch ('http://example.com/robots.txt', ttl = 1)
# Aguarde 2 segundos
r.expired ()
# => True
Consultas
Reppy tenta manter o controle do hospedeiro de modo que você não precisa. Isso é feito automaticamente quando você usa buscar, ou você pode, opcionalmente, fornecer a URL que você foi buscar-lo a partir de análise. Fazer isso permite que você fornecer apenas o caminho ao consultar. Caso contrário, você deve fornecer toda a url:
# Este é factível
r = reppy.fetch ('http://example.com/robots.txt')
r.allowed ('/')
r.allowed (['/ Olá', '/ Howdy'])
# E assim é esta
data = urllib2.urlopen ('http://example.com/robots.txt') .read ()
r = reppy.parse (dados, url = 'http: //example.com/robots.txt')
r.allowed (['/', '/ Olá', '/ Howdy'])
# No entanto, nós não saber implicitamente que estes são de domínio
reppy.allowed (['/', '/ Olá', '/ Howdy'])
Crawl-Delay e Sitemaps
Reppy também expõe o não-RFC, mas amplamente utilizado Crawl-Delay e Sitemaps atributos. O atraso de rastreamento é considerado em uma base per-agente do usuário, mas os sitemaps são consideradas global. Se eles não forem especificados, o atraso de rastreamento é None, e sitemaps é uma lista vazia. Por exemplo, se este é o meu robots.txt:
User-agent: *
Crawl-delay: 1
Mapa do Site: http://example.com/sitemap.xml
Mapa do Site: http://example.com/sitemap2.xml
Em seguida, estes são acessíveis:
com o arquivo ("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 de harmonização
Você pode fornecer um agente de usuário de sua escolha para buscar robots.txt, e, em seguida, a seqüência de agente do usuário que corresponder é padrão para o que aparece antes do primeiro /. Por exemplo, se você fornecer o agente do usuário como 'MyCrawler / 1.0', então vamos usar 'MyCrawler' como a string de acordo com User-agent. As comparações são insensíveis ao caso, e nós não suportam curingas em User-Agent. Se esse padrão não combina com você, você pode fornecer uma alternativa:
# Isto irá corresponder contra 'myuseragent' por padrão
r = reppy.fetch ('http://example.com/robots.txt', userAgent = 'MyUserAgent / 1.0')
# Isto irá corresponder contra 'someotheragent' em vez
r = reppy.fetch ('http://example.com/robots.txt', userAgent = 'MyUserAgent / 1,0', userAgentString someotheragent '' =)
Caminho-de harmonização
Caminho correspondente suporta tanto * e $
Recursos :
- Memoização de robots.txt buscado
- Expiração retirado do Expira cabeçalho
- consultas em lote
- user agent configurável para buscar robots.txt
- baseando automática transferir novamente na expiração
- Suporte para Crawl-delay
- Suporte para Sitemaps
- correspondência Wildcard
Requisitos :
- Python
Comentários não encontrado