Глядя на вашу страницу примера, она имеет 3 hrefs, которые указывают на файл. Когда вы смотрите на href, иногда вы можете сказать, что это файл, основанный на расширении. Но в обычном сценарии веб-сайты могут выполнять некоторую обработку на стороне сервера и затем возвращать файл. Иногда URL-адреса не являются даже файлами, они указывают на какую-то другую страницу.
Итак, вам нужно сделать две вещи.
- Получить все якорные теги и ссылки на веб-странице. (Ты можешь использовать
BeautifulSoup для этого шага)
- Отфильтровать URL-адреса файлов из URL-адресов html. (Это сложная часть. Вы можете встретить статические ресурсы, такие как .js или .css или файлы изображений и т. Д.)
Для выполнения второй части вы можете использовать библиотеку запросов Python, чтобы получить тип содержимого. Вот небольшой пример:
In [3]: import requests
In [4]: response = requests.head('https://speed.hetzner.de/100MB.bin', allow_redirects=True)
In [5]: response
Out[5]: <Response [200]>
In [6]: response.content
Out[6]: b''
In [7]: response.headers
Out[7]: {'Server': 'nginx', 'Date': 'Tue, 07 May 2019 21:21:28 GMT', 'Content-Type': 'application/octet-stream', 'Content-Length': '104857600'
, 'Last-Modified': 'Tue, 08 Oct 2013 11:48:13 GMT', 'Connection': 'keep-alive', 'ETag': '"5253f0fd-6400000"', 'Strict-Transport-Security': 'ma
x-age=15768000; includeSubDomains', 'Accept-Ranges': 'bytes'}
Если вы посмотрите на response.headers
, вы можете увидеть 'Content-type', который установлен на 'application/octet-stream'
. Это поле должно использоваться для фильтрации файлов. Существуют и другие типы контента , которые вы должны искать, чтобы решить, является ли он загружаемым или нет. Если у вас есть этот отфильтрованный список, это список загружаемых файлов на этой веб-странице.
Обратите внимание, что я использую requests.head
для получения типа контента. Используйте запрос HEAD, чтобы получить мета-информацию об URL. Если вы выполните GET / POST, это может привести к превышению времени ожидания.