Дошли руки до парсинга. Я не буду пока показывать вам сложные примеры. Пока сделаем парсинг простого урла средствами urllib.parse. Прикол в том, что многие опытные и не опытные программисты собирают урл примерно так: 'yousite.ru/?' + 'param1=' + str(num1) + '&' + 'param2=' + str(num2). Хорошо если у вас мало параметров. Но если их будет много? Что тогда? Ваша задача быстро научиться: разбирать строку, менять параметры, собирать новый урл с изменёнными параметрами.
#!/usr/bin/python3
#freelance.py
import urllib.parse as urllib
if __name__=='__main__':
'''
если вызывается напрямую ./freelance.py, то запускаем скрипт
'''
# разбираем url + получаем параметры
url = 'https://freelance.ru/projects/?cat=4&spec=446'
base_url = url.split('/?')[0]
data = url.split('/?')[-1]
data = urllib.urlparse(url)
print(base_url)
#вывод: https://freelance.ru/projects
query_data = urllib.parse_qs(data.query)
print(query_data)
#вывод: {'cat': ['4'], 'spec': ['446']}
#меняю параметр
query_data['cat'][0]=str(5)
'''
собираем url с изменёнными параметрами
внимание! в urllib.urlunsplit(5 элементов!!!)
'''
new_url = urllib.urlunsplit(('https', 'freelance.ru', '/projects/',\
'cat='+query_data['cat'][0] + '&spec='+query_data['spec'][0], ''))
print(new_url)
'''
вывод:
https://freelance.ru/projects/?cat=5&spec=446
'''
# верхний способ довольно длинный, оптимизируем сборку get-параметров
new_url = base_url + '/?' + urllib.urlencode(query_data, doseq=True)
print(new_url)
'''
вывод:
https://freelance.ru/projects/?spec=446&cat=5
'''
Функция urllib.urlunsplit имеет одну особенность. Вы должны передавать только пять параметров. Если у вас нет 5 параметров, то ставьте пустоту в качестве значения. Обратите внимание на функцию urllib.urlencode. Она собирает get-параметры (ключ=значение) в одну строку. Сколько бы не было параметров, все они будут обработаны.
Если вам нужно собрать url из частей с разделителем /, то воспользуйтесь функцией join
base_url = 'https://freelance.ru'
new_url = '/'.join([base_url, 'param1', 'param2', 'param3'])
print(new_url)
#вывод: https://freelance.ru/projects/param1/param2/param3
Вы можете подробно прочитать про функции библиотеки urllib.parse на страницах: urllib.parse(docs.python.org) и urllib.parse(ilnurgi1.ru)