2016-04-19 2 views
0

Я тестировал Reppy с google.com.robots.txt, но с определенными записями это немного пошло.Reppy ведет себя странно с определенными записями

Ниже перечислены:
Disallow: /alerts/, здесь должно быть False.
Allow: /alerts/$, должен получить True здесь.

Я получаю True для 1-го и False для второй записи. Пока я получил правильные результаты с остальными элементами.

>>> import reppy 
>>> from reppy.cache import RobotsCache 
>>> robots = RobotsCache() 
>>> rules = robots.fetch("http://google.com") 
>>> rules.allowed('/search', 't') 
False  
>>> rules.allowed('/search/about', 't') 
True 

#While things are right above, they are unexpected below 

>>> rules.allowed('/alerts/', 't') 
True # FALSE is expected here 
>>> rules.allowed('/alerts/$', 't') 
False # TRUE is expected here 
>>>  

Я был бы признателен, если бы кто-нибудь дал мне подсказку, где можно исправить это.

ответ

0

$ не является литералом $, это означает «конец URL».

Взгляните на this documentation:

Google, Bing, Yahoo и Ask поддерживают ограниченную форму "маски" для значений путей. К ним относятся:

  • * обозначает 0 или более экземпляров любого действительного характера
  • $ обозначает конец URL

Так эти правила:

Allow: /alerts/manage 
Allow: /alerts/remove 
Disallow: /alerts/ 
Allow: /alerts/$ 

означает, что вы можете получить доступ к /alerts/manage, /alerts/remove и /alerts/, но не любой другой ребенок от /alerts/ (например, /alerts/foo). Таким образом, результаты, которые вы видите являются точными:

Это возвращает истину, поскольку она соответствует Allow: /alerts/$:

>>> rules.allowed('/alerts/', 't') 
True 

Это возвращает ложь, потому что он соответствует Disallow: /alerts/:

>>> rules.allowed('/alerts/$', 't') 
False 
+0

Спасибо! Полностью понял это. – abT

Смежные вопросы