0

我正在尝试使用 phpsimpledom 抓取网页。

$html = '<div class="namepageheader"> 
            <div class="u">Name: <a href="someurl">Noor Shaad</a>
            <div class="u">Age: </div>
        </div> ' 
$name=$html->find('div[class="u"]', 0)->innertext;
$age=$html->find('div[class="u"]', 1)->innertext;

我尽我所能从每个标签中获取文本,class="u"但它不起作用,因为</div> 第一个标签上缺少结束标签<div class="u">。任何人都可以帮我解决这个问题......

4

1 回答 1

1

您可以在标签应该关闭的位置附近找到一个元素,然后通过替换它来标准化 html。例如,您可以将</a>标签替换为</a></div>.

str_replace('</a>','</a></div>',$html)

或者如果有太多封闭 </a>标签,请替换 </a><div class="u"> </a></div><div class="u">

str_replace('</a><div class="u">','</a></div><div class="u">',$html)

可能还有另一个问题。标签之间有间隙,替换无法正常工作。要解决这个问题,可以先删除标签之间的空格,然后再替换。

$html = '<div class="namepageheader"> 
            <div class="u">Name: <a href="someurl">Noor Shaad</a>
            <div class="u">Age: </div>
        </div> ' ;
$html = preg_replace('~>\\s+<~m', '><', $html);
str_replace('</a><div class="u">','</a></div><div class="u">',$html);
$name=$html->find('div[class="u"]', 0)->innertext;
$age=$html->find('div[class="u"]', 1)->innertext;

于 2021-07-21T13:04:00.677 回答