Форум сайта python.su
0
Приветствую.
Столкнулся с проблемой, не знаю как решить.
Имеется html страница, где есть ссылки с такими вот src
/ololo/leaders.php
/ololo/leaders.php?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8
/ololo/leaders.php?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8
Хотелось бы узнать, как можно дописать в конце каждой из них строку ‘.html’.
re.sub() и .replace() не помогают, т.к. первая строка входит в состав 2-ой и 3-ей, и получается не то, что надо.
Спасибо.
Отредактировано Galvanize (Фев. 1, 2014 19:02:17)
Офлайн
19
Офлайн
0
И как это можно применить?
Офлайн
0
Объясню немного подробнее.
Имеет html страницу, в которой есть ссылки вида:
/ololo/about.php
/ololo/contact.php
/ololo/leaders.php
/ololo/leaders.php?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8
/ololo/leaders.php?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8
…
я их паршу со странички, и помещаю в массив. Потом перебирая элементы массива подставляю к ссылкам ‘.html’, и меняю прежние ссылки в коде странички на новые. Всё бы ничего, но когда подходит очередь кода, вида
old_url = ‘/ololo/leaders.php’
new_url = old_url + ‘.html’
html_code.replace(old_url, new_url)
то ссылки
/ololo/leaders.php?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8
/ololo/leaders.php?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8
меняются на
/ololo/leaders.php.html?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8
/ololo/leaders.php.html?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8
Как можно поменять ссылки, без подобных косяков?
Отредактировано Galvanize (Фев. 1, 2014 15:25:52)
Офлайн
19
И как это можно применить?разобрать url на компоненты изменить нужный вам собрать снова, не надо регепсами или replace этого делать есть стандартная библиотека
Офлайн
0
Разложить урл на части я могу и обычным сплитом =), это не проблема.
Мне не понятно как Вы предлагаете мне заменить уже измененные урлы в коде страницы?
Вот, имеем код:
import re import urlparse html = """ <html> <body> <a href="../ololo/leaders.php"></a> <a href="../ololo/leaders.php?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8"></a> <a href="../ololo/leaders.php?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8"></a> </body> </html> """ #парсим урлы urls = re.compile('<a href="(.*?)"', re.DOTALL).findall(html) # urls = ['../ololo/leaders.php', '../ololo/leaders.php?pageNum_rs_getpositions=0&totalRows_rs_getpositions=8', #'../ololo/leaders.php?pageNum_rs_getpositions=1&totalRows_rs_getpositions=8'] for url in urls: #что дальше?
Отредактировано Galvanize (Фев. 1, 2014 16:07:31)
Офлайн
Вам предлагают сделать по-умному, фактически W.W.J.D.
Вот вам вариант, без urlparse
re.sub('(\d)"></a>', '\\1.html"></a>', html) re.sub('(\d)"></a>', '$1.html"></a>', html)
Отредактировано kise97 (Фев. 1, 2014 16:43:08)
Офлайн
0
kise97, спасибо, но Ваш пример не делает того, что требуется. И да, у вас идет привязка к цифре в параметрах строки. Если её там не будет, то пример не сработает.
Мне нужен универсальный способ.
Как по-умному? urlparse только разложит урл на части, что я и без его помощи давно сделал. Вопрос не в том как разложить и подставить .html, а в том как мне изменить старые урлы на новые (которые я уже давно получил) без конфликта, который дает re.sub и .replace?
В моем примере, в списке первой идет ‘/ololo/leaders.php’, и если её заменить в html на ‘/ololo/leaders.php.html’ то и в ссылках содержащих ‘/ololo/leaders.php’ она тоже поменяется и получится полная лажа.
Для данного примера регулярка будет такая re.sub('(.*)“></a>', ‘\\1.html”></a>’, html). Мне это не помогло, т.к. я привел не совсем корректный пример. В реальном html-коде будет много чего левого подходящего под условия регэкспа.
Отредактировано Galvanize (Фев. 1, 2014 17:12:10)
Офлайн
19
Мне не понятно как Вы предлагаете мне заменить уже измененные урлы в коде страницы?Смотрите lxml
Отредактировано PanovSergey (Фев. 1, 2014 17:44:41)
Офлайн
0
Что именно мне там искать? Вы можете привести хотя бы один работающий пример?
Мне не нужны парсеры. Мне нужен способ поменять урлы безболезненным для моего случая способом.
Отредактировано Galvanize (Фев. 1, 2014 17:49:31)
Офлайн