голосование
PHP
Javascript
BASH
HTML
Firebird
Майнинг
Программы
Хостинг
Железо
Ресурсы
GIT
SEO
Oracle
Python
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Парсинг url при помощи библиотеки urllib.parse Python

Дошли руки до парсинга. Я не буду пока показывать вам сложные примеры. Пока сделаем парсинг простого урла средствами 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)

просмотры: 932, уровень: средний уровень, рейтинг: 0, дата: 2018-03-30 18:12:02
проголосовать:

Комментарии:






поиск
сайты друзей
банеры
Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://ping-admin.ru/index_5659.html мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://www.2domains.ru домен RU домен RU всего за 99 рублей