Как при сканировании страницы получить полный URL-адрес из атрибутов ‹a href› или ‹frame src›

На самом деле я использую PHP, но такое сканирование можно выполнить на любом языке программирования. Будет немного сложно обслужить много ситуаций. Пожалуйста, помогите мне разобраться в проблеме и, пожалуйста, дайте мне некоторое предложение о том, иду ли я в правильном направлении.

Что я знаю, так это текущий URL-адрес, по которому я могу получить список ссылок от <a href=" или от <frame src=".

Я делаю следующее: из текущего URL-адреса я могу сначала получить корневой URL-адрес, например, из http://www.abc.com/def, я могу сначала получить http://www.abc.com. Это необходимо для ситуации <a href="/fff.html", поэтому сначала мне нужно узнать URL-адрес корня.

Во-вторых, мне нужно получить каталог URL-адресов из текущего URL-адреса, это немного сложно, и я до сих пор не знаю, как это сделать идеально. Например, из http://www.abc.com/def/xyz.htm , его URL-адрес: http://www.abc.com/def. Это необходимо для удовлетворения ситуации <a href="../../xyz.html">.

Проблема, с которой я столкнулся, заключается в том, как получить текущий каталог URL? Например, если текущий URL-адрес http://www.abc.com/def, как я могу на самом деле знаете, что def - это каталог или файл? Если def является файлом, то URL-адрес каталога будет http://www.abc.com. Но если def является каталогом, тогда URL-адрес каталога будет просто http://www.abc.com/def.

Вы можете сказать, что если есть наконец "/", то это будет каталог. Но с моей точки зрения, когда я сканирую веб-страницу, я не могу гарантировать, что конструктор веб-страницы добавит «/» в конце URL-адреса каталога. URL-адрес каталога является абсолютно допустимым, например, если def является каталогом, то http://www.abc.com/def, вероятно, означает http://www.abc.com/def/index. HTML.

Поскольку трудно понять, является ли http://www.abc.com/def каталогом или скриптом файл, то трудно сделать полный URL-адрес из относительного href, такого как <a href="xyz.html">.

Я слишком усложняю проблему? Есть ли какое-нибудь решение для этого?

Существуют и другие ситуации, например, href="# означает привязку, тогда я просто добавлю ее в конец текущего URL-адреса. Является ли это правильным и действительным для любой текущей ситуации с URL-адресом? Это означает, что это действительно для ситуации, когда текущий URL-адрес http://www.abc.com/def (def — это каталог), http://www.abc.com/def#xyz следует преобразовать в http://www.abc.com/def/index.html#xyz ?

А для href="javascript: или href="vbscript: и т. д. я просто проигнорирую это.

А для href="xyz.???", а если ??? является файлом изображения, исполняемым файлом или чем-либо, что не является допустимым html, я просто проигнорирую их?

Спасибо.

Вопрос может быть немного запутанным, надеюсь, я объяснил это ясно.


person user534498    schedule 18.09.2011    source источник
comment
+1 вопрос хорошо сформулирован и сформулирован! Также не забудьте <img src="...">.   -  person chown    schedule 18.09.2011
comment
Тот факт, что это применимо к любому языку программирования, не означает, что вы должны добавлять теги языка программирования, это, вероятно, означает, что вы не должны добавлять никаких. Я удалил python, так как ваш выбор кажется произвольным, но оставил PHP, потому что вы говорите, что это то, над чем вы на самом деле работаете.   -  person agf    schedule 18.09.2011
comment
Привет, извините, я добавил популярные языковые теги, потому что думал, что это сделает вопрос видимым для большего количества людей, которые могут понять проблему.   -  person user534498    schedule 18.09.2011
comment
Вы не должны добавлять тег, если он действительно не актуален, но это сработало - мы оба, кто ответил, в основном люди Python.   -  person agf    schedule 18.09.2011


Ответы (2)


Все, что следует за доменным именем, может сопоставляться с тем, что хочет человек, настраивающий домен.

Нет никакой гарантии, что URL-адрес, оканчивающийся на .html, ссылается на реальный файл где-то в файловой системе или что он вернет действительный HTML-код или что-то еще.

Вы можете произвольно решить считать def/ каталогом или частью имени файла, как бы вам ни хотелось, так как любой выбор одинаково верен.

person agf    schedule 18.09.2011
comment
Привет, спасибо, это действительно напомнило мне, что я, вероятно, буду относиться ко всему одинаково, даже к abc.com/xyz .jpg. Я попытаюсь прочитать часть заголовка файла и посмотреть, является ли он допустимым html, и если это так, мне нужно будет использовать некоторые тесты, чтобы увидеть, является ли это каталогом или файлом. - person user534498; 18.09.2011
comment
Чтобы узнать, является ли что-то изображением, исполняемым файлом или чем-то еще, используйте content- введите заголовок. - person agf; 18.09.2011

Если http://www.abc.com/def является каталогом, то веб-сервер обычно перенаправляет на http://www.abc.com/def/, чтобы не запутать клиента. Вам просто нужно заметить перенаправление и использовать urlparse.urljoin() или соответствующую функцию в ‹выбор языка› для объединения двух компонентов в любом случае, как это сделал бы браузер.

person Ignacio Vazquez-Abrams    schedule 18.09.2011
comment
Привет, спасибо, в настоящее время я использую file_get_contents для получения текущего содержимого ссылки, и я использую fopen и чтение до ‹/head› для быстрого сканирования заголовков и метаданных. Есть ли способ узнать перенаправление с помощью PHP? Я попробую это решение и вернусь позже. - person user534498; 18.09.2011