Я не использовал Механический суп, но смотрю на документы,
Эта функция работает аналогично follow_link ()
и follow_link
говорит (выделено мое)
- Если ссылка представляет собой тег bs4.element.Tag (т. Е. Из предыдущего вызова links () или find_link ()), перейдите по ссылке.
- Если ссылка не имеет атрибута href или имеет значение None, обработайте ссылку как url_regex и найдите ее с помощью find_link (). Все дополнительные аргументы передаются этой функции.
Знаки вопроса (помимо прочего) являются метасимволами регулярных выражений (регулярных выражений), поэтому вы захотите избежать их, если хотите использовать их для follow_link
/ download_link
:
import re
# ...
browser.download_link(re.escape("https://www.ons.gov.uk/generator?format=xls&uri=/economy/grossdomesticproductgdp/timeseries/l2kq/qna"))
Однако, если первая страница, которую вы посещаете, не содержит этой прямой ссылки, я не уверен, что она все равно поможет. (Попробуйте сначала, хотя.)
Возможно, вы сможете использовать базовую сессию браузера requests
, в которой, вероятно, находится файл cookie (если для загрузки требуются некоторые файлы cookie), чтобы напрямую загрузить файл:
resp = browser.session.get("https://www.ons.gov.uk/generator?format=xls&uri=/economy/grossdomesticproductgdp/timeseries/l2kq/qna")
resp.raise_for_status() # raise an exception for 404, etc.
with open('filename.xls', 'wb') as outf:
outf.write(resp.content)