Мне нужно изменить только крошечный бит URL-адреса, но Python добавляет дополнительные вещи, в частности: биты ' amp; ', которые портят адрес URL, генерируя ошибку, как это делает URL не существует! Пример:
specialinfo = str(42) my_url = 'https://www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=' + specialinfo + '&endofmyurlbits' print(my_url)
Я получаю:
https://www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=42&endofmyurlbits
вместо того, что я ожидал:
https://www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=42&endofmyurlbits
Если я исключаю ' https: 'бит работает! Пример:
specialinfo = str(42) my_url = 'www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=' + specialinfo + '&endofmyurlbits' print(my_url)
Теперь я получаю:
www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=42&endofmyurlbits
Я использую с:
with urllib.request.urlopen('https://'+my_url) as remote: data = remote.read()
И он работает. Однако остается вопрос! Почему добавление ' https: // ' в строку выполняет вышеупомянутое?
ps .: Я использую Python 3 с Jupyterlab в Windows 10.
Попробуйте следующее:
import html html.unescape('https://www.justexample.com/thingshere/morestuff/ordinaryurlthing?mybit=42&endofmyurlbits')
Это должно сработать. Это происходит потому, что HTML принимает только utf-8 и пытается преобразовать все символы, отличные от utf-8. Вы можете отменить это, применив то, что я только что показал.
Надеюсь, это помогло