我需要有关此学习脚本的构建方面的帮助,这些脚本试图从网站上获取文章。
当前我无法从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;
}
答案 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。就像&
变成&
,而<b>bold</b>
变成bold
。