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

Парсинг 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)

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

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






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