我是正则表达式和类似的东西的新手。我只有很少的知识,我认为我目前的问题是关于他们的。
我有一个网页,其中包含文本。我想从只有在SPAN
s 中的网页中获取链接class="img"
。
我经历了这些步骤。
- 抓住所有
SPAN
标有“img”类的s(这是我正在寻找的艰难步骤) - 将那些
SPAN
s 移动到一个新变量 - 解析变量以获取带有链接的数组(每个
SPAN
只有 1 个链接,所以这很容易)
我正在使用 PHP,但任何其他语言都无所谓,我正在寻找如何处理第一步。有人有建议吗?感谢:D
结合使用 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";
}
像这样的模式<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);
?>
我正在使用 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 - 应该适用于大多数文件,无论格式是否正确)。