我正在学习用curl抓取数据。 这是我的代码。
function readHTML($url){
$data = curl_init();
curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($data, CURLOPT_URL, $url);
$result = curl_exec($data);
curl_close($data);
return $result;}
$codeHTML = readHTML('http://website.com/');$ex1 = explode('ol class=tabcont>', $codeHTML); $ex2 = explode('/ol>', $ex1[1]);echo $ex2[0];
我对此输出html代码有疑问。
<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>
我想用PHP剪切代码<li></li>
,所以像这样的代码
<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>
我该怎么办?抱歉,我的英语不好。 :) 感谢。
答案 0 :(得分:2)
由于您正在抓取此HTML,而不是硬编码。我觉得使用DomDocument是合适的。
<?php
$html = '<ul>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$ul = $dom->getElementsByTagName('ul')->item(0);
$count = 0;
$toRemove = array();
foreach ($ul->childNodes as $node)
if ($node->tagName === 'li')
if ($count++ >= 5)
$toRemove[] = $node;
foreach ($toRemove as $node)
$ul->removeChild($node);
$dom->removeChild($dom->firstChild);
$dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild);
echo $dom->saveHTML();
<ul><li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
<li>content</li>
</ul>
空行是由于<li>
标记周围的新行所致。您也可以通过检查#text
来删除它们。