我正在编写一个小的scraper脚本,它将找到具有特定类名的图像URL。我知道我的cURL和DOMDocument运行正常,甚至DomXPath真的(据我所知,没有错误)但我正在努力弄清楚如何获取xpath查询结果的URL。
到目前为止我的代码:
$dom = new DOMDocument();
@$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$div = $xpath->query('//*[@class="productImage"]');
var_dump($div);
echo $div->item(0);
如果我var_dump($ x)页面输出没问题。所以CURL工作正常。但我不知道如何获取$ div中包含的数据。我试图找到一个带有'productImage'类的图像,它看起来像:
<img src="/uploads/5W/yP/5WyPP4l7Z-jmZRzu_MJ6zg/1077-d.jpg" border="1" alt="Album" class="productImage">
我想要该图像标记的来源。
有什么建议吗?
答案 0 :(得分:2)
$dom = new DOMDocument();
$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$imgs = $xpath->query('//*[@class="productImage"]');
foreach($imgs as $img)
{
echo 'ImgSrc: ' . $img->getAttribute('src') .'<br />' . PHP_EOL;
}
试试......
==编辑:其他信息==
我在这里使用循环的原因是因为你可能会找到多个img。如果您知道只有一个元素(或者您希望找到第一个dom节点),您可以通过domnodelist的item方法从domnodelist访问elelement - 就像这样:
$dom = new DOMDocument();
$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$img = $xpath->query('//*[@class="productImage"]');
echo 'ImgSrc: ' . $img->item(0)->getAttribute('src') .'<br />' . PHP_EOL;
答案 1 :(得分:-1)
你实际上并不需要在这里使用XPath,因为你似乎只是在图像之后,可以使用DOMDocument::getElementsByTagName()
,然后是一个简单的过滤器来完成:
foreach ($dom->getElementsByTagName('img') as $image) {
$class = $image->getAttribute('class');
if (strpos(" $class ", " productImage ") !== false) {
$url = $image->getAttribute('src');
// do stuff
}
}
然后,您可以使用DOMElement::getAttribute()
:
src
属性
echo $image->getAttribute('src');