【问题标题】:php to extract data from a websitephp从网站中提取数据
【发布时间】:2017-01-12 11:17:12
【问题描述】:

我想从第一个笑话中获取所有<p> 元素,所以基本上我制作了这个脚本:

<?php
$url = "http://sms.hindijokes.co";
$html = file_get_contents($url);
$doc = new DOMDocument;
$doc->strictErrorChecking = false;
$doc->recover = true;
@$doc->loadHTML("<html><body>".$html."
</body>      </html>");
$xpath = new DOMXPath($doc);
$query1 = "//h2[@class='entry-title']/a";
$query2 = "//div[@class='entry-content']/p";
$entries1 = $xpath->query($query1);
$entries2 = $xpath->query($query2);
$var1 = $entries1->item(0)->textContent;
$var2 = $entries2->item(0)->textContent;
echo "$var1"; 
echo "<br>";
$f = 5;
for($i = 0; $i < $f; $i++){
echo $entries2->item($i)->textContent."\n";
}
?>

这次我知道第一个笑话中有五个 &lt;p&gt; 元素,但如果我想让它成为自动化脚本,有时&lt;p&gt; 元素会多于或少于五个,因此会造成混乱。

【问题讨论】:

标签: php


【解决方案1】:

您首先需要divp 元素,因此您的查询将是:

$entries2 = $xpath->query('//(div[@class='entry-content'])[1]/p');

现在您可以使用 foreach() 循环迭代所有 p 元素(提取其 html 内容):

$innerHtml = '';
foreach ($entries2 as $entry) {
    $children = $entry->childNodes;
    foreach ($children as $child) {
        $innerHtml .= $child->ownerDocument->saveXML($child);
    }
}
$innerHtml = str_replace(["\r\n", "\r", "\n", "\t"], '', $innerHtml);

【讨论】:

  • 如何也获取html内容..像p元素是这样的(不使用小于大于)
  • 我如何从包含的 p 元素中获取 html 内容?因为它们是
    需要包含在内的...
  • @AliveColdJuan 检查我编辑的答案是否提取了内部 html 内容。它基于我的旧代码,现在我不确定它是否按预期工作。
【解决方案2】:

DOMXPath::query 返回DOMNodeList 对象。使用DOMNodeList::length 属性。

$f = $entries2->length;

【讨论】:

  • 我怎样才能包含 br 你能帮我他们是一些
    在 p 标签中
【解决方案3】:

尝试这种方式它会返回直到 null;但是有些笑话有多个 p 标签,所以最好通过自定义 class/id

找到它
$i = 0;
while($entries2->item($i)->textContent!=NULL) {
    echo "<br>";
    echo $i." ".$entries2->item($i)->textContent;
    $i++;
}

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2015-08-26
    • 2023-04-05
    相关资源
    最近更新 更多