Найти - Пользователи
Полная версия: [РЕШЕНО] Подскажите способ замены строк
Начало » Python для новичков » [РЕШЕНО] Подскажите способ замены строк
1 2
Galvanize
Приветствую.

Столкнулся с проблемой, не знаю как решить.
Имеется 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-ей, и получается не то, что надо.
Спасибо.
PanovSergey
urlparse
Galvanize
И как это можно применить?
Galvanize
Объясню немного подробнее.

Имеет 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

Как можно поменять ссылки, без подобных косяков?
PanovSergey
И как это можно применить?
разобрать url на компоненты изменить нужный вам собрать снова, не надо регепсами или replace этого делать есть стандартная библиотека
Galvanize
Разложить урл на части я могу и обычным сплитом =), это не проблема.
Мне не понятно как Вы предлагаете мне заменить уже измененные урлы в коде страницы?
Вот, имеем код:

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:
#что дальше?
kise97
Вам предлагают сделать по-умному, фактически W.W.J.D.

Вот вам вариант, без urlparse
re.sub('(\d)"></a>', '\\1.html"></a>', html)
re.sub('(\d)"></a>', '$1.html"></a>', html)
Galvanize
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-коде будет много чего левого подходящего под условия регэкспа.
PanovSergey
Мне не понятно как Вы предлагаете мне заменить уже измененные урлы в коде страницы?
Смотрите lxml
Можно еще юзать BeautifulSoup но он вроде как не особо.
Можно еще написать sax. Но это сильно много работы.
Есть еще вот такая штука scrapy Но она для разбора, думаю вам позже пригодится.
Galvanize
Что именно мне там искать? Вы можете привести хотя бы один работающий пример?
Мне не нужны парсеры. Мне нужен способ поменять урлы безболезненным для моего случая способом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB