Robots.txt Поведение, когда директивы Allow: или Disallow: не указывают соответствующий шаблон - PullRequest
2 голосов
/ 09 февраля 2020

Я работаю над презентацией о поиске в Интернете и пытаюсь объяснить части файла 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

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

# 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

...