Python urljoin не объединяет относительные и абсолютные URL-адреса вместе правильно

У меня есть два URL-адреса:

absolute_url = 'https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports'
relative_url = 'en/relacje-inwestorskie/reports/current-reports/2018/242018/'

И я хотел бы присоединиться к ним, чтобы создать это:

https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports/2018/242018/

Однако urljoin неправильно объединяет URL-адреса:

from urllib.parse import urljoin

urljoin(absolute_url, relative_url)

>> https://ciechgroup.com/en/relacje-inwestorskie/reports/en/relacje-inwestorskie/reports/current-reports/2018/242018/

Вы знаете, как я могу добиться этого, не дублируя часть URL-адреса?

🤔 А знаете ли вы, что...
Python используется в научных вычислениях и обработке изображений с использованием библиотеки OpenCV.


1
604
2

Ответы:

Добавьте / в свой relative_url

from urllib.parse import urljoin
absolute_url = 'https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports'
relative_url = '/en/relacje-inwestorskie/reports/current-reports/2018/242018/'
>>> urljoin(absolute_url, relative_url)
'https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports/2018/242018/'

Решено

urljoin делает то, что должен делать. Он принимает «текущий путь» вашего абсолютного URL-адреса (/en/relacje-inwestorskie/reports/) в качестве основы, по которой ваш относительный URL-адрес будет «относительно». Результат действительно /en/relacje-inwestorskie/reports/en/relacje-inwestorskie/reports/current-reports/2018/242018/.

Исходя из ожидаемого результата, кажется, что ваш relative_url на самом деле является абсолютным путем, поэтому вам нужно добавить к нему /.

>>> absolute_url = 'https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports'
>>> relative_url = '/en/relacje-inwestorskie/reports/current-reports/2018/242018/'
>>> from urllib.parse import urljoin
>>> urljoin(absolute_url, relative_url)
'https://ciechgroup.com/en/relacje-inwestorskie/reports/current-reports/2018/242018/'