如何使用简单的html dom获取特定内容的链接

时间:2017-07-15 04:28:03

标签: php web-scraping simple-html-dom

我想得到&#34; / contact / new&#34;来自<a href="/contact/new">Contact us</a>。如果链接有“联系人”,那么条件就是如此。或者&#39;联系我们&#39;然后获取href值。没有上课。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

使用regexPHP

$text = '<a href="/contact/new">Contact us</a>';

preg_match_all('(<a href="([^"]*)">[Contact us|Contact]*</a>)', $text, $matches);
foreach ($matches[1] as $href) {
    // Do whatever you want with the href attribute
    echo $href;
}

使用jQuery

选择所有a元素,检查他们的html()是否是您要查找的文字attr.("href")

$("a").each(function(index, element) {
    if ($(elem).html() == "Contact" || $(elem).html() == "Contact us") {

        // Do whatever you want with the href attribute
        console.log($(elem).attr("href"));

    }
});

答案 1 :(得分:0)

我已经通过这段代码解决了。从@Matias Cerrotta接近后显然是

foreach($dom->find('a') as $element) { echo $element->plaintext . '<br>'; }

答案 2 :(得分:0)

这可以使用SimpleXML和XPath来完成。

您需要使用file_get_contents或其他方法调整将页面加载到SimpleXML的方式,以将页面读取到变量然后传递给它。

我创建了一个可以在

下面运行的模拟
<?php
$html = '
<a href="/contact/new">Contact us</a>
';

//Replace with your loading logic here
$xml = simplexml_load_string($html);

//Perform the search
$search = $xml->xpath('//a[contains(text(), "Contact us") or contains(text(), "Contact")]');

//Check the results have at least one value
if(count($search) !== 0 && $search !== false)
{
    //Get first item
    $item = $search[0];

    //Get item attributes
    $attributes = $item->attributes();

    //Output the HREF attribute (need an existence check here (isset))
    echo $attributes['href'];
}

XPath方法返回一个匹配数组,如果返回多个结果,则需要对其进行过滤,在示例中,我抓取第一个并输出节点的href属性。

搜索查找所有a标记,无论字符串/文档中的位置如何,并检查它是否包含“与我们联系”或“联系”。

注意: XPath区分大小写,虽然有办法使其不敏感,但您需要自己实现或编写更多条件来检查。

如果您需要不区分大小写,请检查另一个Stack问题,之前已经介绍过:

例如:case insensitive xpath searching in php