Найти - Пользователи
Полная версия: Достать ссылку
Начало » Python для новичков » Достать ссылку
1
trik
Помогите достать из этого только ссылку, пожалуйста. От регекспов уже мозги закипают

<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> 
Kasta_neda
# -*- 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())
terabayt
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')
trik
Спасибо всем, но сделал так

re.compile('(?<=href=“).*?(?=”)')
terabayt
trik
Спасибо всем, но сделал так
re.compile('(?<=href=“).*?(?=”)')
так плохо! так как, как минимум, ссылка может быть и в одинарных кавычках
py.user.next
>>> 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'
>>>
terabayt
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>

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

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

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


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

py.user.next
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-сервером.
Почитай грамматику .
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