2014-12-24 3 views
1

Я разрабатывал небольшой эксперимент на python для нормализации URL-адреса. Моя основная цель - добавить косую черту / в конце URL-адреса, если она еще не указана. например, если это http://www.example.com, то он должен быть преобразован в http://www.example.com/Python: проблема синтаксического анализа URL-адресов при добавлении конечной косой черты

Вот небольшой фрагмент кода для того же:

if url[len(url)-1] != "/": 
     url = url + "/" 

Но это также преобразует имена файлов. Например, http://www.example.com/image.png в http://www.example.com/image.png/, что неверно. Я просто хочу добавить косую черту в каталог, а не имена файлов. Как мне это сделать?

Заранее благодарен!

ответ

0

Вы можете шаблон матч на последнюю подстроку, чтобы проверить наличие известных доменов vs расширения файлов. Нетрудно перечислить, по крайней мере, базовые top level domains, например .com, .gov, .org и т. Д.

Если вы знакомы с регулярными расширениями, вы можете сопоставить их по шаблону, например '.com$'.

В противном случае вы можете разделить на. и проверить последнюю подстроку, вы получите:

In [32]: url_png = 'http://www.example.com/image.png' 

In [33]: url_com = 'http://www.example.com' 

In [34]: domains = ['com', 'org', 'gov'] 

In [35]: for url in [url_png, url_com]: 
    ....:  suffix = url.split('.')[-1] 
    ....:  if suffix in domains: 
    ....:   print url 
    ....: 
http://www.example.com 

В качестве примечания и, как вы видите, в приведенном выше примере, вам не нужно делать url[len(url)-1] индексировать последний элемент списка; Пути Пути - это только url[-1].

+0

ну, ваш фрагмент действительно решил мою другую связанную с этим проблему, относящуюся к этой проблеме :) – hnvasa

0

Вы должны убедиться, что всякий раз, когда код . входит в URL-адрес, для каталога он должен быть в имени хоста. Если это где-то еще, это имя файла. Так что для этого просто сделать url.count('.') и проверить, если это больше, чем те, в вашем имени хоста (например, здесь его равным 2)

if url.count('.') > 2: 
    url = url if url[-1] != '/' else url[:-1] 
else: 
    url = url if url[-1] == '/' else url + '/' 
+0

, но может быть действительный URL-адрес, например 'http: // www.example.com/1.2/1.3/1.4/index.html' refer: [ссылка] (http://stackoverflow.com/questions/6777274/ can-urls-contains-dots-in-the-path-part) – hnvasa

+0

Это намного проще, чем мой ответ, и он должен работать большую часть времени, хотя вам нужно будет выбрать первую подстроку после http: // перед /. Но я не думаю, что имена хостов ограничены одним поддоменом ... – THK

+0

не только субдомены будут приносить дополнительные '.', но точки также допускаются в самом URL-пути ... что делает вышеупомянутую технику очень трудной в использовании и может выдать неправильные результаты ... – hnvasa