Поведение robots.txt, когда в директивах Allow: или Disallow: не указан соответствующий шаблон

Я работаю над презентацией о парсинге веб-страниц и пытаюсь объяснить некоторые части файла robots.txt.

Учитывая следующий раздел файла robots.txt Википедии, кажется, что IsraBot разрешено очищать / в то время как Mediapartners-Google* нет.

# advertising-related bots:
User-agent: Mediapartners-Google*
Disallow: /

# Wikipedia work bots:
User-agent: IsraBot
Disallow:

Это подтверждается

url = 'https://en.wikipedia.org'
rfp = urllib.robotparser.RobotFileParser(f'{url}/robots.txt')
rfp.read()

bots = ["*", "Mediapartners-Google*", "IsraBot", "gsa-garmin"]
for bot in bots:
    print(rfp.can_fetch(bot, f'{url}/'))
# True
# False
# True
# True

Однако, когда я смотрю на файл robots.txt от Garmin, кажется, что они довольно открыты для соскоб. Они даже отмечают, что их намерение состоит в том, чтобы все боты могли выполнять скрапинг, за некоторыми исключениями.

# Allow all agents to get all stuff
User-agent:  *
Disallow:

# ...except this stuff...

# pointless without POSTed form data:
Disallow: /products/comparison.jsp

# not for the general public:
Disallow: /dealerResource/*
Disallow: /lbt/*

User-agent: gsa-garmin
Allow: /

Тем не менее, запуск того же кода, что и выше, на сайте Garmin, похоже, не позволяет ботам выполнять парсинг.

url = 'https://www.garmin.com'
rfp = urllib.robotparser.RobotFileParser(f'{url}/robots.txt')
rfp.read()

bots = ["*", "Mediapartners-Google*", "IsraBot", "gsa-garmin"]
for bot in bots:
    print(rfp.can_fetch(bot, f'{url}/'))
# False
# False
# False
# False

Я думаю, главный вопрос заключается в том, в чем разница между двумя строками ниже (для Disallow или Allow)? Я прочитал это, так как в первом говорится, что ничего не запрещено, а во втором говорится, что «/» запрещено.

Disallow:
Disallow: /

Я также недоумеваю, почему rfp.can_fetch('gsa-garmin', 'https://www.garmin.com/') возвращает False.

Есть ли разница между этими строками?

Disallow: 
Allow: /

Даже ответы на этот вопрос предполагают, что я правильно понимаю, но код говорит об обратном . Также в ответах на этот вопрос указано, что директива Allow является нестандартное расширение, но RobotFileParser.parse() поддерживает его.

И если это ошибка с Python, это было выполнено с Python 3.7.5.


person Cohan    schedule 09.02.2020    source источник