我有一个用curl抓取的页面,我希望抓住具有某个id的所有链接。据我所知,最好的方法是使用dom和xpath。下面的代码抓取了大量的网址,但是删除了很多网页,并抓取了不是网址的文字。
$ curl_scraped_page是用curl抓取的页面。
$dom = new DOMDocument();
@$dom->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
我是否在正确的轨道上?我只需要弄乱“/ html / body // a”xpath语法,还是需要添加更多来捕获id元素?
答案 0 :(得分:1)
您也可以这样做,并且您只有a
个标签,其中包含id
和href
:
$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数据进行操作。