#python #urllib #robots.txt
Вопрос:
Вот соответствующие части amazon.co.jp/robots.txt:
User-agent: *
Disallow: /-/
Disallow: /gp/aw/shoppingAids/
Allow: /-/en/
URL, который я хочу проверить: "https://www.amazon.co.jp/-/en/035719/dp/B000H4W9WG/ref=sr_1_61?dchild=1amp;keywords=dot matrix printeramp;qid=1617229306amp;s=computersamp;sr=1-61"
Теперь это соответствует запрету: Disallow: /-/
но также и разрешению: Allow: /-/en/
.
анализатор файлов-роботов urllib помечает URL-адрес как can_fetch = False. Я проверил исходный код, и, похоже, он идет хронологически. Поскольку на первом месте стоит запрет, он помечает разрешение как ложное, и все.
Любая идея, если это правильный подход, учитывая robots.txt стандартно, потому что мне это кажется довольно нелогичным, и я считаю, что URL-адрес должен быть разрешен.
Соответствующий код:
import urllib.robotparser
rp = urllib.robotparser.RobotFileParser()
rp.set_url("https://www.amazon.co.jp/robots.txt")
rp.read()
can_ftch = rp.can_fetch("*", "https://www.amazon.co.jp/-/en/035719/dp/B000H4W9WG/ref=sr_1_61?dchild=1amp;keywords=dot matrix printeramp;qid=1617229306amp;s=computersamp;sr=1-61")
ПРАВКА: по стандарту Google это должно работать так, как я думал. URL-адрес должен быть разрешен. the most specific rule based on the length of the [path] entry trumps the less specific (shorter) rule
EIDT2: еще немного покопался и нашел этот вопрос:
Для Google и Bing правило состоит в том, что выигрывает директива с наибольшим количеством символов. Вот, это директива «Запретить».
- Запретить: /блог/ (6 символов)
- Разрешить: /блог (5 символов)
Если директивы разрешить и запретить одинаковы по длине, то выигрывает наименее ограничительная директива. В этом случае это была бы директива allow.
Важно отметить, что это относится только к Google и Bing. Другие поисковые системы прислушиваются к первой соответствующей директиве. В данном случае это запрещено.
По этой логике анализатор RobotFileParser действительно верен.