a_m*_*dev 11 php html5 web-crawler
我有一个HTML文件,其中包含许多JUST"li"标签,没有头部和身体标签以及其他任何东西.我想用PHP计算它们.我怎样才能做到这一点?
但是,我试过这个:
$dom = new DOMDocument();
DOMDocument::loadHTML($tmp_file);
$count = $dom->getElementsByTagName("li");
echo count($count);
Run Code Online (Sandbox Code Playgroud)
但它返回1.
这是$ tmp_file(我不知道它们将被检索多少(可能是其中的一百个)但我只是将其中的5个添加到这里):
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426832/????????-?????-??????-???-???????-?????-??" target="_blank" title="???????? ????? ?????? ??? ??????? ????? ??">???????? ????? ?????? ??? ??????? ????? ??</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426824/????-??-???-??????-?????-???-???-??-?????" target="_blank" title="????: ?? ??? ?????? ????? ??? ??? ?? ?????">????: ?? ??? ?????? ????? ??? ??? ?? ?????</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426817/????-???-«???»-???????-?????-?????-?????-????" target="_blank" title="???? ??? «???» ??????? ????? ????? ????? ????">???? ??? «???» ??????? ????? ????? ????? ????</a>
</li>
<li class="news-video">
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426815/5-????-?????-??-???-???????-NBA?-96-04-21" target="_blank" title="5 ???? ????? ?? ??? ??????? NBA? 96/04/21">5 ???? ????? ?? ??? ??????? NBA? 96/04/21</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426813/?????-????-?????-????-?????-?????-??-?????????" target="_blank" title="????? ???? ????? ???? ????? ????? ?? ?????????">????? ???? ????? ???? ????? ????? ?? ?????????</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426808/??????-??????-?-?????-??-???-???-??-???-????" target="_blank" title="?????? ?????? ? ????? ?? ??? ??? ?? ??? ????">?????? ?????? ? ????? ?? ??? ??? ?? ??? ????</a>
</li>
<li >
<a target="_blank" class="small-news-link" href="http://www.varzesh3.com/news/1426792/???????-?????-????????-??-?????-????" target="_blank" title="???????: ????? ???????? ?? ????? ????">???????: ????? ???????? ?? ????? ????</a>
</li>
Run Code Online (Sandbox Code Playgroud)
你很亲密 我认为您正在寻找的是以下内容:
$dom = new \DOMDocument();
@$dom->loadHTML($html); // or @$dom->loadHTMLFile($filename); if providing filename rather than actual HTML content
$count = $dom->getElementsByTagName('li')->length;
echo $count;
Run Code Online (Sandbox Code Playgroud)
根据您的值,$tmp_file您可以使用loadHTML()它包含实际内容,还是loadHTMLFile()包含文件名.(请注意,不应静态调用这些方法.)
该方法getElementsByTagName()返回一个DOMNodeList对象,该对象具有length包含已找到节点数的属性.
你可以在这里试试代码.
这种DOM解析方法比字符串或正则表达式搜索更可取,因为它旨在考虑HTML可以被接受的多种可变方式(即不一致的间距,属性顺序).
你可以对该字符串做一个非常简单Substring Count的<li>(或-li-),它会返回项目数.看这里:function.substr-count
$count = substr_count($html,'<li>'); //where $html holds your piece of HTML.
Run Code Online (Sandbox Code Playgroud)
这个问题的要点是,我只想实现标签并获取它们的链接,我只想使用解析,但有时你应该在脑海中使用你的 Intel i9 并更好地思考,所以我不应该获取<li>标签直接定位<a>标签,它的工作原理:
这是代码:
$this->dom = new DOMDocument();
@$this->dom->loadHTMLfile($tmp_file);
$this->as = $this->dom->getElementsByTagName('a');
foreach($this->as as $a) { ...
Run Code Online (Sandbox Code Playgroud)
由于每个项目都保存到数据库中,所以我无法使用 MySQL 查询从数据库中获取它们的计数,就是这样!
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |