如何从带有DOM&amp ;;的页面中抓取链接XPath的?

时间:2011-03-24 20:51:40

标签: php dom xpath curl hyperlink

我有一个用curl抓取的页面,我希望抓住具有某个id的所有链接。据我所知,最好的方法是使用dom和xpath。下面的代码抓取了大量的网址,但是删除了很多网页,并抓取了不是网址的文字。

$ curl_scraped_pa​​ge是用curl抓取的页面。

$dom = new DOMDocument();
@$dom->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

我是否在正确的轨道上?我只需要弄乱“/ html / body // a”xpath语法,还是需要添加更多来捕获id元素?

4 个答案:

答案 0 :(得分:1)

您也可以这样做,并且您只有a个标签,其中包含idhref

$doc = new DOMDocument();
$doc->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($doc);

$hrefs = $xpath->query('//a[@href][@id]');

答案 1 :(得分:0)

$dom = new DOMDocument();
$dom->loadHTML($curl_scraped_page);

$links = $dom->getElementsByTagName('a');

$processed_links = array();

foreach ($links as $link)
{
    if ($link->hasAttribute('id') && $link->hasAttribute('href'))
    {
        $processed_links[$link->getAttribute('id')] = $link->getAttribute('href');
    }
}

这是关于你的问题的解决方案。

答案 2 :(得分:0)

http://simplehtmldom.sourceforge.net/

include('simple_html_dom.php');
$html = file_get_html('http://www.google.com/');
foreach($html->find('#www-core-css') as $e) echo $e->outertext . '<br>';

答案 3 :(得分:0)

我认为最简单的方法是将以下两个类组合起来从其他网站获取信息:

从任何HTML标记,内容或标记属性中提取信息:http://simplehtmldom.sourceforge.net/

易于处理卷曲,支持POST请求:https://github.com/php-curl-class/php-curl-class

示例:

include('path/to/curl.php');
include('path/to/simple_html_dom.php');
$url = 'http://www.example.com';

$curl = new Curl;
$html = str_get_html($curl->get($url)); //full HTML of website
$linksWithSpecificID = $html->find('a[id=foo]'); //returns array of elements

从上部链接检查简单HTML DOM解析器手册,以便使用HTML数据进行操作。