Php 从外部网站获取DIV内容
我想从一个纯PHP的外部网站获得一个DIV 外部网站: 我想从isitdownrightnow(statusup Div)获得Div文本:Php 从外部网站获取DIV内容,php,html,domdocument,Php,Html,Domdocument,我想从一个纯PHP的外部网站获得一个DIV 外部网站: 我想从isitdownrightnow(statusup Div)获得Div文本:网站可能只为你关闭了… 我已经用DOMDocument和str\u-get\u-html尝试了file\u-get\u-contents,但我无法让它工作 比如这个 $page = file_get_contents('http://css-tricks.com/forums/topic/jquery-selector-div-variable/');
网站可能只为你关闭了…
我已经用DOMDocument
和str\u-get\u-html
尝试了file\u-get\u-contents
,但我无法让它工作
比如这个
$page = file_get_contents('http://css-tricks.com/forums/topic/jquery-selector-div-variable/');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
// Loop through the DIVs looking for one withan id of "content"
// Then echo out its contents (pardon the pun)
if ($div->getAttribute('class') === 'bbp-template-notice') {
echo $div->nodeValue;
}
}
它只会在控制台中显示一个错误:
加载资源失败:服务器响应状态为500
(内部服务器错误)
这可能有点过分,但你会明白要点的
<?php
$doc = new DOMDocument;
// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;
// Most HTML Developers are chimps and produce invalid markup...
$doc->strictErrorChecking = false;
$doc->recover = true;
$doc->loadHTMLFile('http://www.isitdownrightnow.com/check.php?domain=youtube.com');
$xpath = new DOMXPath($doc);
$query = "//div[@class='statusup']";
$entries = $xpath->query($query);
var_dump($entries->item(0)->textContent);
?>
这是我经常使用的:
$url = 'https://somedomain.com/somesite/';
$content = file_get_contents($url);
$first_step = explode( '<div id="thediv">' , $content );
$second_step = explode("</div>" , $first_step[1] );
echo $second_step[0];
$url='1!'https://somedomain.com/somesite/';
$content=file\u get\u contents($url);
$first_step=分解(“”,$content);
$second_step=explode(“,$first_step[1]);
echo$second_步骤[0];
我使用了@mightyuhu提出的xpath方法,他添加的赋值非常有效。根据您从中获取信息的网页以及标识您希望获取的标记的“id”或“类”的可用性,您必须更改所使用的查询。如果标记指定了一个“id”,您可以使用它(该示例用于提取美元汇率):
$query=“//div[@id='USD']”代码>
然而,网站开发者不会让我们这么容易,所以在我的示例中,还有几个“未命名”标签需要深入研究:
<div id="USD" class="tab">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Ask Rate</td>
<td align="right">1.77400</td>
</tr>
<tr class="even">
<td>Bid Rate</td>
<td align="right">1.70370</td>
</tr>
<tr>
<td>BNB Fixing</td>
<td align="right">1.735740</td>
</tr>
</tbody>
</table>
</div>
因此,我使用了上面的查询,但将该项改为1而不是0,以获取汇率所在的第二列(第一列包含文本“Ask rate”):
另一种方法是直接在查询中引用值,当您没有名称或样式时,应该通过索引标记来完成,这是我从Maxthon浏览器及其“Inspect element”功能和“Copy XPath”右菜单选项(整洁,是吗?)中获得的知识:
请注意,它还在/
后面插入了一个星号(*),我没有对其进行深入研究。在这种情况下,您应该再次获得项(0)
的值,因为没有其他值
如果需要,可以对提取的字符串进行任何更改,例如更改数字格式以匹配您的首选项:
$usdrate = number_format($usdrate, 5, ',', ' ');
我希望有人会觉得这很有帮助,因为我找到了上面的答案,并希望有人能抽出时间来搜索正确的查询和语法。$contents=file\u get\u contents($url);
$contents = file_get_contents($url);
$title = explode('<div class="entry-content">',$contents);
$title = explode("</div>",$title[1]);
$fp = fopen ("s.php", "w+");
fwrite ($fp, "$title[0]");
fclose ($fp);
require_once('s.php');
$title=分解(“”,$contents);
$title=分解(“,$title[1]);
$fp=fopen(“s.php”,“w+”);
fwrite($fp,“$title[0]”);
fclose($fp);
需要_一次('s.php');
它必须加载…所以我猜它是用JS动态生成的…这使得它非常有用difficult@OP你真的需要告诉我们你有什么具体的问题,或者你无法得到帮助。“不是一个有效的问题描述。@PeeHaa这是一个不同的url。如果他这样做了,它会起作用,但问题中的确切url不会说他想使用该URI。他只是想知道结果谢谢你们的回答。实际上我只是选择这个网站作为例子,因为我自己在网上没有任何东西。它也可以是任何其他站点,甚至是一个简单的html文件@PeeHaa我删除了它,因为我变得非常混乱,如果我回应我的结果,它只是空白的。这确实有效。令人惊叹的。我如何在没有“字符串(XX)”的情况下获取它,而只获取var中的文本?将var_dump更改为一个赋值,如$var=$entries->item(0)->textContent
非常感谢。成功了。我到处玩。。。。。但我真的很难在其他网站上使用它,有时有效有时无效。例如,我试图获取一个div是。
但使用的是“//h2[@class='success']”
不起作用。很难说没有关于特定url的任何进一步详细信息。$var=$xpath->evaluate('string(//div[@class=“startup”])
将直接以字符串形式返回文本内容。它在某些网站上确实适用于我。然而,在网站上,我试图得到它不工作。。。知道吗?没有域名我就说不出来了。但是,您尝试获取的内容可能不是在使用它而不是访问域时生成的。您可以使用HTTP客户机/调试器进行实验。我正在使用pawhttp。只需尝试一个请求并更改标题信息。然后,您可以查看输出并检查是否显示了divs内容。可以我试过了。它仅在修改标题时显示div。非常感谢。有很多比字符串操作更好的方法。如果他们在HTML中添加了一个新类,或者做了一些小的调整,那么你就完蛋了。尝试goutte没问题,但是如果子内容有多个div,并且它也有多个closign div(代码正确,但仅适用于单个div),那么子内容又如何呢?为什么要使用fopen/fwrite/require_一次?也;您正在复制已接受的答案..?感谢您发布此问题的答案!在堆栈溢出时不鼓励只使用代码的答案,因为原始海报(或未来读者)可能很难理解它们背后的逻辑。请编辑您的问题并对代码进行解释,以便其他人可以从您的答案中获益。谢谢
"//*[@id="USD"]/table/tbody/tr[1]/td[2]"
$usdrate = number_format($usdrate, 5, ',', ' ');
$contents = file_get_contents($url);
$title = explode('<div class="entry-content">',$contents);
$title = explode("</div>",$title[1]);
$fp = fopen ("s.php", "w+");
fwrite ($fp, "$title[0]");
fclose ($fp);
require_once('s.php');