2

我是正则表达式和类似的东西的新手。我只有很少的知识,我认为我目前的问题是关于他们的。

我有一个网页,其中包含文本。我想从只有在SPANs 中的网页中获取链接class="img"

我经历了这些步骤。

  1. 抓住所有SPAN标有“img”类的s(这是我正在寻找的艰难步骤)
  2. 将那些SPANs 移动到一个新变量
  3. 解析变量以获取带有链接的数组(每个SPAN只有 1 个链接,所以这很容易)

我正在使用 PHP,但任何其他语言都无所谓,我正在寻找如何处理第一步。有人有建议吗?感谢:D

4

3 回答 3

12

结合使用 PHPs DOMDocument -class 和DOMXPath -class 来导航到您需要的元素,如下所示:

<?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"; }

您可以在 W3C 页面上了解有关 XPath 语言的更多信息。

于 2009-03-20T12:49:20.860 回答
1

像这样的模式<span.* class="img".*>([^<]*)</span>应该可以正常工作。假设您的代码看起来像

<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);

?>
于 2009-03-20T13:09:40.267 回答
1

我正在使用 PHP,但任何其他语言都无所谓,我正在寻找如何处理第一步。有人有建议吗?

我们……呃……

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']

(那是 python,使用BeautifulSoup - 应该适用于大多数文件,无论格式是否正确)。

于 2009-03-20T14:20:22.127 回答