Как я могу извлечь список URL-адресов, полученных во время рендеринга HTML-страницы в python?

Я хочу получить список всех URL-адресов, которые браузер выполнит для запроса GET, когда мы попытаемся открыть страницу. Например, если мы пытаемся открыть cnn.com, в первом ответе HTTP есть несколько URL-адресов, которые рекурсивно запрашивает браузер.

Я не пытаюсь отобразить страницу, но я пытаюсь получить список всех URL-адресов, которые запрашиваются при визуализации страницы. Простая проверка содержимого ответа HTTP не будет достаточной, так как потенциально могут быть изображения в загружаемом css. В любом случае я могу сделать это в python?

2 ответа

Вероятно, вам придется отображать страницу (необязательно отображать ее), чтобы убедиться, что вы получаете полный список всех ресурсов. Я использовал PyQT и QtWebKit в аналогичные ситуации. Особенно, когда вы начинаете подсчет ресурсов, динамически включаемых с помощью javascript, пытаясь разобрать и загружать страницы рекурсивно с помощью BeautifulSoup, просто не будет работать.

Ghost.py - отличный клиент, который поможет вам начать работу с PyQT. Кроме того, ознакомьтесь с Документами QWebView и QNetworkAccessManager docs.

Ghost.py возвращает кортеж (страница, ресурсы) при открытии страницы:

from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://my.web.page')

resources включает все ресурсы, загруженные исходным URL как объекты HttpResource. Вы можете получить URL для загруженного ресурса с помощью resource.url.


Я думаю, вам нужно будет создать список всех известных расширений файлов, которые вы НЕ хотите, а затем сканировать содержимое ответа HTTP, проверяя "если подстрока не в списке non-list:"

Проблема заключается в том, что все href заканчиваются TLD, forwardslashes, переданными по url переменными и т.д., поэтому я думаю, что было бы легче проверить то, что вы знаете, чего не хотите.

licensed under cc by-sa 3.0 with attribution.