PHP解析外部站点

PHP解析外部站点,php,Php,我没有解析外部url以获取数据的经验,但今天我尝试了一些实验: $str1 = file_get_contents('http://www.indiegogo.com/projects/ubuntu-edge'); $test1 = strstr($str1, "amount medium clearfix"); $parts = explode(">",$test1); $parts2 = vsprintf("%s", $parts[1]); $str2 = file_get_cont

我没有解析外部url以获取数据的经验,但今天我尝试了一些实验:

$str1 = file_get_contents('http://www.indiegogo.com/projects/ubuntu-edge');
$test1 = strstr($str1, "amount medium clearfix");
$parts = explode(">",$test1);
$parts2 = vsprintf("%s", $parts[1]);

$str2 = file_get_contents('http://www.indiegogo.com/projects/ubuntu-edge');
$test2 = strstr($str2, "money-raised goal");
$test3 = str_ireplace("money-raised goal", "", "$test2");
$test4 = str_ireplace("\"", "", "$test3");
$test5 = str_ireplace(">", "", "$test4");
$test6 = substr($test5, 0, 29);
$test7 = explode("Raised of", $test6);
$test8 = vsprintf("%s", $test7[1]);
请尝试以下代码:

print\r($parts2)然后使用
打印($test8)然后使用
回显“$parts2-$test8”

因为Ubuntu Edge活动在这几天非常流行,所以我尝试从网站上获取这两个字段(只是作为实验),但没有成功。 它抓取了两个字段,但我不能把它们放在同一个变量中。输出是或$parts2,或$parts2包含test8的值,或仅包含$test8

我做错了什么,为什么?还有没有一个更简单的方法来做我想做的事情,而不需要那么多代码

它抓住了两个字段,但我不能把它们放在同一个字段中 变数

我不知道你说的是什么意思

还有没有一个更简单的方法来做我想做的事情,而不需要这么多 密码

没有这么多代码?不,更灵活(可能)更高效?对

试试这个,根据你的喜好量身定做

<?php
$page = file_get_contents('http://www.indiegogo.com/projects/ubuntu-edge');

$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->loadHTML($page);

$finder = new DomXPath($doc);

// find class="money-raised"
$nodes = $finder->query("//*[contains(@class, 'money-raised')]");

// get the children of the first match  (class="money-raised")
$raised_children = $nodes->item(0)->childNodes;

// get the children of the second match (class="money-raised goal")
$goal_children = $nodes->item(1)->childNodes;

// get the amount value
$money_earned = $raised_children->item(1)->nodeValue;

// get the amount value
preg_match('/\$[\d,]+/', $goal_children->item(0)->nodeValue, $m);
$money_earned_goal = $m[0];


echo "Money earned: $money_earned\n";
echo "Goal: $money_earned_goal\n";

?>
loadHTML($page);
$finder=newdomxpath($doc);
//查找class=“筹集的资金”
$nodes=$finder->query(“/*[contains(@class,'money-raised')]”);
//获得第一场比赛的孩子(class=“筹款”)
$raised_children=$nodes->item(0)->childNodes;
//获得第二场比赛的孩子(class=“筹款目标”)
$goal_children=$nodes->item(1)->childNodes;
//获取金额值
$money\u revenued=$raised\u children->item(1)->nodeValue;
//获取金额值
预匹配('/\$[\d,]+/',$goal\u children->item(0)->nodeValue,$m);
$money_reaned_goal=$m[0];
echo“挣得的钱:$Money\u挣得的钱\n”;
echo“目标:$money\u money\u Goal\n”;
?>
这有11行代码没有回声(与您的12行代码相比),但只调用另一个站点一次。抓取网站是一项有点复杂的任务。这段代码从这个精确的页面获取您想要的值


如果你想刮网站,我强烈建议学习使用和。有很多东西需要学习,但值得付出努力。

可以尝试一下,包括简单的…php然后是文件\u get\u html,然后是一些非功能性示例(尝试stackoverflow的解决方案),但没有成功,并决定使用本机,没有外部库…这不是本机的。使用DOMDocument是一个本地的好主意。EJTH:您能提供一个使用DOM的简单函数示例吗?比我的示例复杂得多,但是100%的函数性…谢谢您的回答。顺便说一句,你如何调查你是否有你所需要的准确值,因为如果我一步一步地在每一行上使用print\u r或var\u dump,它不会给我任何有用的东西。我不确定我是否理解你的问题。基本上,我在查看HTML时构造DOM代码。我们需要找到class=“挣钱”的所有元素。这给了我一个包含2个元素的DOMNodeList,对应于该类的2个标签。我看到第一个元素在
标记中有一个我想要的值,它是列表中第一个“节点”的子元素。使用
nodeName
而不是
nodeValue
有助于提供标记的名称。因此,基本上是反复试验P随着您学习使用DOMDocument,您将变得更加熟练。它比您的示例更复杂,但HTML的结构也更复杂。刮取也可能比搜索字符串更复杂,尤其是当您想要定位和复制整个部分时。DOMDocument很好地实现了这一目的,因此值得学习和实践。顺便说一句:var_dump为您提供了对象类型、DOMNodeList、DOMElement等。从那里您可以使用PHP文档来了解您需要什么。实际上@DarkBee提到的simplehtmldom解析器也不错。而且它不是您所说的“外部库”,因为它完全是用PHP编写的。它的使用要比DOMDocument简单得多(但可能要慢一些,因为与用C编写的扩展相比PHP“慢”),但在大多数情况下,两者都可以完成这项工作。