Pregunta

Soy nuevo en expresiones regulares y cosas por el estilo. Tengo pocos conocimientos y creo que mi problema actual es acerca de ellos.

Tengo una página web, que contiene texto. Quiero conseguir enlaces de la página web que sólo están en SPAN s que tienen class="img".

Voy a través de esos pasos.

  1. agarrar todo el <=> s etiquetado con la clase "img" (este es el paso duro que estoy buscando)
  2. mover esos <=> s a una nueva variable
  3. Analizar la variable para obtener una matriz con los enlaces (Cada <=> tiene sólo 1 enlace, por lo que este será fácil)

Estoy usando PHP, pero cualquier otro idioma no importa, estoy buscando la manera de tratar con el primer paso. Cualquiera tiene una sugerencia? Gracias: D

¿Fue útil?

Solución

Uso PHPS DOMDocument -class en combinación con el DOMXPath -class para navegar a los elementos que necesita, como esto:

<?php
$dom = new DOMDocument();
$dom->loadHTML(file_get_contents('http://foo.bar'));
$xpath = new DOMXPath($dom);

$elements = $xpath->query("/html/body//span[@class='img']//a"); foreach ($elements as $a) { echo $a->getAttribute('href'), "\n"; }

Usted puede aprender más sobre el XPath de idioma en la página del W3C.

Otros consejos

Un modelo como <span.* class="img".*>([^<]*)</span> debería funcionar bien., Asumiendo que su código es algo así como

<span class="img">http://www.img.com/img.jpg</span>
<span alt="yada" class="img">animage.png</span>
<span alt="yada" class="img" title="still works">link.txt</span>
<span>not an img class</span>


<?php

$pattern = '@<span.* class="img".*>([^<]*)</span>@i';

//$subject = html code above

preg_match_all($pattern, $subject, $matches);

print_r($matches);

?>
  

Estoy usando PHP, pero cualquier otro idioma   no importa, estoy buscando la manera de   tratar con el primer paso. Cualquiera tiene   una sugerencia?

-e-ell ...

import urllib
from BeautifulSoup import BeautifulSoup, SoupStrainer

html = urllib.urlopen(url).read()
sieve = SoupStrainer(name='span', attrs={'class': 'img'})
tag_soup = BeautifulSoup(html, parseOnlyThese=sieve)
for link in tag_soup('a'):
    print link['href']

(que es Python, utilizando BeautifulSoup - debería funcionar en la mayoría de douments, bien formado o no).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top