PHP - 多卷曲 - 抓取数据/内容

时间:2012-09-14 22:27:24

标签: php dom xpath curl web-scraping

我已经开始使用 - curl,dom,xpath构建一个Curl会话,并且效果很好。

我现在正在构建一个基于curl的scraper,用于在一个流中从多个站点获取数据,并且该脚本回显我输入的单个短语..但它不会拾取变量。

do{
    $n=curl_multi_exec($mh, $active);
}while ($active);

foreach ($urls as $i => $url){  
    $res[$i]=curl_multi_getcontent($conn[$i]);      
    echo ('<br />success');
}

所以这确实与成功文本一样多次回复...但实际上这不是我想要的......我想用单个卷曲会话分解html就好了。

我在单卷曲会议中做了什么:

//parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($res);

// grab all the on the page
$xpath = new DOMXPath($dom);         
$product_img = $xpath->query("//div[@id='MAIN']//a");

for ($i = 0; i < $product_img->length; $i++){
    $href = $product_img->item($i);
    $url = $href->getAttribute('href');
    echo "<br />Link : $url";
}

这个dom解析/ xpath适用于单个会话卷曲,但不是在我运行multicurl时。 在Multicurl上,我可以为会话中的URL做curl_multi_getcontent,但这不是想要.. 我希望得到与我在单个会话中使用Dom / Xpath相同的内容。 我该怎么办?

修改

我似乎遇到了getAttribute的问题。它是一个我无法抓住图像的链接。在抓取时显示链接,但随后它会抛出错误:

致命错误:在

中的非对象上调用成员函数getAttribute()

查询:

// grab all the on the page
$xpath = new DOMXPath($dom);
$product_img = $xpath->query("//img[@class='product']");
$product_name = $xpath->query("//img[@class='product']");

这是有效的:

for ($i = 0; i < $product_name->length; $i++) {
    $prod_name = $product_name->item($i);
    $name = $prod_name->getAttribute('alt');
    echo "<br />Link stored:  $name";
}

这不起作用:

for ($i = 0; i < $product_img->length; $i++) {
    $href = $product_img->item($i);
    $pic_link = $href->getAttribute('src');
    echo "<br />Link stored:  $pic_link";
}

知道我做错了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

由于一些奇怪的原因,只有一个src才能正常工作 这个问题可以被认为是解决了#34;。