Форум сайта python.su
0
Регулярка должна собирать ссылки залинкованные с картинок.
rex = re.compile(r'(href=(\"|\'|\.\.)([^>]*?)(\"|\'|(class=))(.*?)><img)', re.S) urls = [c[2] for c in rex.findall(s)]
<tr> <td valign="top" class="class"> <a href="http://www.domain.com/url1" target="_new" rel="nofollow"><img style="border: 1px solid #000000;" name="name" id="id" src="http://domain.com/1.jpg" width="400" height="500" /></a> </td> <td valign="top" class="class"> <span class="title">title</span><br> text<span class="new">text</span> <br> <br> <a href="http://www.domain.com/url2" class="class" title="title">title</a>, <a href="http://www.domain.com/url3" class="class" title="title">title</a> <br><br> </td>
Офлайн
173
r"""href=["'](.*?)["'].*?<img"""
import lxml.html doc = lxml.html.fromstring(html) print doc.xpath('//img/parent::a/@href') #['http://www.domain.com/url1']
Отредактировано reclosedev (Июль 20, 2012 17:57:26)
Офлайн
14
reclosedevА где там написано, почему именно это плохая идея? Первый пост - поток сознания и прямого ответа на вопрос не дает. Ниже написано, что PCRE по Хомскому вообще требуют машину Тьюринга.
плохая затея
Офлайн
0
А в вариаете с lxml реально собирать только локальные ссылки игнорируя все что ведет на внешние домены и исключая ссылки с выбранной последовательностью символов в теле?
Например есть сайт domain.com. На нем с картинок залинвованы ссылки:
http://domain.com/taramparam.html
http://domain1.com/taramparam.html
http://domain.com/taramparam_вредноеслово.html
Нам нужна только "http://domain.com/taramparam.html".
Офлайн
173
webstghost
А в вариаете с lxml реально собирать только локальные ссылки игнорируя все что ведет на внешние домены и исключая ссылки с выбранной последовательностью символов в теле?
Например есть сайт domain.com. На нем с картинок залинвованы ссылки:
http://domain.com/taramparam.html
http://domain1.com/taramparam.html
http://domain.com/taramparam_вредноеслово.html
Нам нужна только "http://domain.com/taramparam.html".
html = """<tr> <td valign="top" class="class"> <a href="http://www.domain.com/url1" target="_new" rel="nofollow"><img style="border: 1px solid #000000;" name="name" id="id" src="http://domain.com/1.jpg" width="400" height="500" /></a> <a href="http://www.domain1.com/bad_url1" target="_new" rel="nofollow"><img style="border: 1px solid #000000;" name="name" id="id" src="http://domain.com/1.jpg" width="400" height="500" /></a> <a href="/url2" target="_new" rel="nofollow"><img style="border: 1px solid #000000;" name="name" id="id" src="http://domain.com/1.jpg" width="400" height="500" /></a> <a href="/bad_url_stopword" target="_new" rel="nofollow"><img style="border: 1px solid #000000;" name="name" id="id" src="http://domain.com/1.jpg" width="400" height="500" /></a> </td> <td valign="top" class="class"> <span class="title">title</span><br> text<span class="new">text</span> <br> <br> <a href="http://www.domain.com/url2" class="class" title="title">title</a>, <a href="http://www.domain.com/url3" class="class" title="title">title</a> <br><br> </td>""" import lxml.html doc = lxml.html.fromstring(html) print doc.xpath('//img/parent::a[not(contains(@href, "stopword")) and starts-with(@href, "/") or starts-with(@href, "http://www.domain.com") ]/@href')
Офлайн
0
Как сделать список заблокированных слов?
Офлайн
173
webstghostВручную в Питоне пробегаясь по списку. Или regexp-ом типа (first|second|third).
Как сделать список заблокированных слов?
print doc.xpath('//img/parent::a[not(re:match(@href, "(first|second|third)"))' ' and starts-with(@href, "/")' ' or starts-with(@href, "http://www.domain.com")]/@href', namespaces={"re": "http://exslt.org/regular-expressions"})
Отредактировано reclosedev (Авг. 21, 2012 11:53:42)
Офлайн
0
Еще такой вопрос. Есть html:
<a href="/url/url.html"> <span class="image"><img src="http://host_ip/img.jpg" alt="text"></span> <span class="text">text</span> <span class="class1">class1</span> <span class="class2">class2</span> </a>
Офлайн
173
Потому что там выбираются родители img, а тут еще span.
Нужно заменить:
'//img/parent::a' на '//a[descendant::img]'
Отредактировано reclosedev (Авг. 21, 2012 16:27:33)
Офлайн
0
reclosedev
Потому что там выбираются родители img, а тут еще span.
Нужно заменить:Т.е. выбираем все а, в потомках у которых есть img.'//img/parent::a' на '//a[descendant::img]'
http://ru.wikipedia.org/wiki/XPath
<li>
<a href="/url/url1.html" />
<img src="http://ip_address/1.jpg" width="100" height="100" border=0 alt="title" /></a>
<h3>title</h3>
<div class="class"><i>class:</i> <a href="/url2/">url2</a>, <a href="url3">url3</a>, <a href="url4">url4</a>, <a href="url5">url5</a></div>
</li>
Офлайн