Wie eine URL auf einer Seite zum Nachschlagen
Frage
Ich bin neu in reguläre Ausdrücke und solche Dinge. Ich habe nur wenige Kenntnisse und ich denke, mein aktuelles Problem an sie ist.
Ich habe eine Webseite, die Text enthält. Ich möchte von der Webseite Links erhalten, die nur in SPAN
s sind die class="img"
haben.
Ich gehe durch diese Schritte.
- greift alle
SPAN
s mit der „img“ Klasse markiert (das ist der harte Schritt, den ich suche) - diese
SPAN
s auf eine neue Variable bewegen
- die Variable Parst einen Array mit den Links zu erhalten (Jeder
SPAN
nur 1 Link hat, so wird dies leicht)
Ich bin mit PHP, aber auch jede andere Sprache spielt keine Rolle, ich bin auf der Suche, wie man mit dem ersten Schritt zu tun. Jeder einen Vorschlag? Danke: D
Lösung
Verwenden Sie PHPs DOMDocument -Klasse in Kombination mit der DOMXPath -Klasse zu den Elementen navigieren Sie benötigen, wie folgt aus:
<?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";
}
Sie können mehr über die XPath Sprache auf der W3C-Seite erfahren.
Andere Tipps
Ein Muster wie <span.* class="img".*>([^<]*)</span>
sollte funktionieren. Ihren Code unter der Annahme, so etwas wie
<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);
?>
Ich bin mit PHP, aber auch jede andere Sprache spielt keine Rolle, ich bin auf der Suche, wie man befassen sich mit dem ersten Schritt. Jedes haben ein Vorschlag?
Wir-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']
(das ist Python, mit BeautifulSoup - sollte auf den meisten douments arbeiten, wohlgeformt oder nein).