PHP从URL解析内容

时间:2018-12-07 20:49:37

标签: php html dom

我需要有关此学习脚本的构建方面的帮助,这些脚本试图从网站上获取文章。

当前我无法从1个元素中获取文章,但无法获取所有元素,这是我尝试获取url的示例

<div class="entry-content">
</div>

<div class="entry-content">
</div>

<div class="entry-content">
</div>

这是我的PHP代码,用于获取第一个div的内容:

function getArticle($url){

    $content = file_get_contents($url);
    $first_step = explode( '<div class="entry-content">' , $content );
    $separate_news = explode("</div>" , $first_step[1] );
    $article = $separate_news[0];

    echo $article;

}

3 个答案:

答案 0 :(得分:2)

您应该真正使用PHP DOMDocument类来解析HTML。就示例代码而言,问题在于您没有处理$first_step数组中的所有结果。您可以尝试这样的事情:

$first_steps = explode( '<div class="entry-content">' , $content );
foreach ($first_steps as $first_step) {
    if (strpos($first_step, '</div>') === false) continue;
    $separate_news = explode("</div>" , $first_step );
    $article = $separate_news[0];
    echo $article;
}

这里是一个小的demo on 3v4l.org

答案 1 :(得分:1)

我在http://simplehtmldom.sourceforge.net/之前使用过这个库。完整文档位于此处http://simplehtmldom.sourceforge.net/manual.htm。 它非常易于使用,并且功能更多。 您可以选择以下文章:

$html = file_get_html($url);
$articles = $html->find(".entry-content");
foreach($articles as $article) echo $article->plaintext;

答案 2 :(得分:1)

您应该使用DOMDocument。尽管通过CSS类选择节点有些棘手,但是您可以像这样使用DomXPath来做到这一点:

$dom = new DomDocument();
$dom->load($url);
$xpath = new DomXPath($dom);
$classname="entry-content";
$nodes = $xpath->query('//*[contains(concat(" ", normalize-space(@class), " "), " entry-content ")]');
foreach($nodes as $node) {
    echo $node->textContent . "\n";
}

现在的优势还在于,可以按预期方式转换文章内容内可能出现的HTML实体和其他HTML。就像&amp;变成&,而<b>bold</b>变成bold