Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2015 18:07:05

trik
Зарегистрирован: 2014-11-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Достать ссылку

Помогите достать из этого только ссылку, пожалуйста. От регекспов уже мозги закипают

<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" id="tosh_link" title="Check"><span></span></a> 

Офлайн

#2 Апрель 25, 2015 21:43:09

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Достать ссылку

# -*- coding: utf-8 -*
from lxml import html
y = '''<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" id="tosh_link" title="Check"><span></span></a> '''
parsed_body = html.fromstring(y)
links = parsed_body.cssselect('a')
links = iter(links)
for n, l in enumerate(links):
    print unicode(l.values()[0])
все линки
# -*- coding: utf-8 -*
from lxml.html import parse
dom = parse('http://www.kinopoisk.ru/film/751916/video/').getroot()
links = dom.cssselect('a')
links = iter(links)
for n, l in enumerate(links):
    #u = l.text_content()
    #print unicode(u),
    print unicode(l.values())

Отредактировано Kasta_neda (Апрель 25, 2015 21:47:41)

Офлайн

#3 Апрель 25, 2015 21:48:46

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Достать ссылку

import re
a = '<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" id="tosh_link" title="Check"><span></span></a>'
print re.search('href=[\'"]?([^\'" >]+)', a).groups()
Kasta_neda lxml это хорошо
from lxml import html
y = '''<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" id="tosh_link" title="Check"><span></span></a> '''
parsed_body = html.fromstring(y)
print parsed_body.get('href')



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Апрель 25, 2015 22:32:28)

Офлайн

#4 Апрель 25, 2015 22:19:20

trik
Зарегистрирован: 2014-11-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Достать ссылку

Спасибо всем, но сделал так

re.compile('(?<=href=“).*?(?=”)')

Офлайн

#5 Апрель 25, 2015 22:32:08

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Достать ссылку

trik
Спасибо всем, но сделал так
re.compile('(?<=href=“).*?(?=”)')
так плохо! так как, как минимум, ссылка может быть и в одинарных кавычках



————————————————
-*- Simple is better than complex -*-

Офлайн

#6 Апрель 25, 2015 22:58:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Достать ссылку

>>> import re
>>> 
>>> s = '<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" id="tosh_link" title="Check"><span></span></a> '
>>> 
>>> out = re.search(r'<a href=.(.*?). ', s).group(1)
>>> out
'http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon'
>>>



Офлайн

#7 Апрель 25, 2015 23:28:29

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Достать ссылку

py.user.next а есть ли смысл привязывать к положению href? может же и так быть

<a id="tosh_link" href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon" class="adv_link" title="Check"><span></span></a> 
и зачем пробел в конце? может же и так быть
<a href="http://2ch.hk/pr/?r=main/view&amp;Li=-34689&amp;Lii=963544&amp;Link_id=13085&amp;Lt=1&amp;Read=96544&amp;Rli=10954&amp;Sn=1&amp;ToshZ=1&amp;name=anon"><span></span></a>

я понимаю, какой вопрос такой и ответ, но можно же более универсально



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Апрель 26, 2015 00:59:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Достать ссылку

terabayt
а есть ли смысл привязывать к положению href?
Последовательность href= может быть в самой ссылке.

terabayt
может же и так быть
<a id="tosh_link" href=
Там можно доработать путём вставки незахватывающей группы. Если же все подробности рассматривать, то нужно много чего сделать, что приведёт в итоге к lxml или реализации того же самого.

terabayt
и зачем пробел в конце?
В ссылке не может быть пробела, поэтому он помогает установить точку на двойную/одинарную кавычку. (Они, кстати, тоже не обязательны. ;) )


terabayt
но можно же более универсально
Поразбирай страницы - увидишь, что либо там всегда всё точно, либо регулярки не подходят (начинают так переполняться, что уже непригодны для отладки).



Отредактировано py.user.next (Апрель 26, 2015 01:02:37)

Офлайн

#9 Апрель 26, 2015 02:01:03

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Достать ссылку

py.user.next
Поразбирай страницы - увидишь, что либо там всегда всё точно
но даже на форуме имеется вот такое
<a class="subscribelink clearb" href="/forum/subscription/topic/26976/add/">Получать уведомления</a>
где Ваш код не пройдет и по положению href и по пробелу вконце
py.user.next
В ссылке не может быть пробела
555 строка кода



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Апрель 26, 2015 03:11:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Достать ссылку

terabayt
py.user.next
Поразбирай страницы - увидишь, что либо там всегда всё точно
но даже на форуме имеется вот такое
Ну, и когда оно изменится? Всё точно - это значит, что можно хоть class туда вписать и оно всегда будет вытаскивать ссылку, потому что class оттуда никуда не денется.

terabayt
где Ваш код не пройдет и по положению href и по пробелу вконце
Так тот regexp для его фрагмента.
Если делать общий regexp для всех фрагментов, он всё равно либо сломается, либо будет нечитаемым (слишком много там возможных вариантов). Ты же на кавычки тоже понадеялся, а их присутствие не обязательно.

И в ссылку их можно точно так же вставить:
<a href="http://python.su/forum/search/?action=search&keywords=abc'&author=&forum=0&search_in=all&sort_by=0&sort_dir=ASC&show_as=topics">Search</a>

terabayt
555 строка кода
На снимке видно, как такие ссылки потом разделяются http-сервером.
Почитай грамматику .



Отредактировано py.user.next (Апрель 26, 2015 03:32:24)

Прикреплённый файлы:
attachment uri.png (144,6 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version