我想从纯PHP的外部网站获取DIV。
外部网站:http://www.isitdownrightnow.com/youtube.com.html
我想要的文字isitdownrightnow(statusup div):<div class="statusup">The website is probably down just for you...</div>
我已经使用file_get_contents
和DOMDocument
尝试了str_get_html
,但我无法让它发挥作用。
例如这个
$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 (内部服务器错误)
答案 0 :(得分:57)
这就是我经常使用的:
$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];
答案 1 :(得分:17)
这可能有点矫枉过正,但你会明白这一点。
<?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);
?>
答案 2 :(得分:3)
我使用了@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>
所以我不得不更改查询以获得'Ask Rate':
$doc->loadHTMLFile('http://www.fibank.bg/en');
$xpath = new DOMXPath($doc);
$query = "//div[@id='USD']/table/tbody/tr/td";
所以,我使用了上面的查询,但是将项更改为1而不是0以获得汇率所在的第二列(第一列包含文本'Ask Rate'):
$entries = $xpath->query($query);
$usdrate = $entries->item(1)->textContent;
另一种方法是直接在查询中引用该值,当你没有名称或样式时,应该使用索引标记来完成,这是我从Maxthon浏览器及其“Inspect element”获得的知识。功能结合“复制XPath”右侧菜单选项(整洁,是吗?):
"//*[@id="USD"]/table/tbody/tr[1]/td[2]"
请注意,它还会在//
之后插入一个星号(*),我还没有深入研究。在这种情况下,您应该再次使用item(0)
获取值,因为没有其他值。
如果需要,您可以对提取的字符串进行任何更改,例如更改数字格式以符合您的偏好:
$usdrate = number_format($usdrate, 5, ',', ' ');
我希望有人会发现这有用,因为我找到了上面的答案,并且会花些时间来搜索正确的查询和语法。
答案 3 :(得分:-3)
$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');