Я написал код, который извлекает html-код любого данного сайта, а затем извлекает из него все ссылки и сохраняет их внутри списка. Моя цель в том, что я хочу изменить все относительные ссылки в html-файле с абсолютными ссылками.Доступ только к ссылкам с заданным форматом из списка python
Вот ссылки:
src="../styles/scripts/jquery-1.9.1.min.js"
href="/PhoneBook.ico"
href="../css_responsive/fontsss.css"
src="http://www.google.com/adsense/search/ads.js"
L.src = '//www.google.com/adsense/search/async-ads.js'
href="../../"
src='../../images/plus.png'
vrUrl ="search.aspx?searchtype=cat"
Эти несколько ссылок, которые я скопировал из HTML-файла, чтобы сохранить этот вопрос простой и менее подвержен ошибкам.
Ниже приведены различные URL-адреса, используемые в HTML файле:
http://yourdomain.com/images/example.png //yourdomain.com/images/example.png /images/example.png images/example.png ../images/example.png ../../images/example.png
Python код:
linkList = re.findall(re.compile(u'(?<=href=").*?(?=")|(?<=href=\').*?(?=\')|(?<=src=").*?(?=")|(?<=src=\').*?(?=\')|(?<=action=").*?(?=")|(?<=vrUrl =").*?(?=")|(?<=\')//.*?(?=\')'), str(html))
newLinks = []
for link1 in linkList:
if (link1.startswith("//")):
newLinks.append(link1)
elif (link1.startswith("../")):
newLinks.append(link1)
elif (link1.startswith("../../")):
newLinks.append(link1)
elif (link1.startswith("http")):
newLinks.append(link1)
elif (link1.startswith("/")):
newLinks.append(link1)
else:
newLinks.append(link1)
На данный момент, что происходит, когда речь идет о втором состоянии, которое является " ../ "он дает мне все URL-адреса, которые начинаются с" ../ ", а также" ../../ ". Это поведение, которое мне не нужно. То же самое касается «/»; он также извлекает URL-адреса, начинающиеся с «//». Я также попытался использовать начальные и конечные параметры функции «startswith», но это не решает проблему.
Как насчет замены порядка 'elif' заявлений, так что'. ./../ 'проверяется * до *' ../ '? – jojonas
Это будет работать, но я не хочу изменять какой-то определенный URL-адрес, как все, начинающиеся с «//», должны оставаться такими же, но когда выполнение достигнет «/», он все равно вычислит другие с двумя слэшами. –
Это грязно, но вы можете использовать пустой оператор 'elif' (используя' pass') в этом случае ... – jojonas