首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php如何使用simplehtmldom在<li><a>中抓取?

php如何使用simplehtmldom在<li><a>中抓取?
EN

Stack Overflow用户
提问于 2011-11-15 17:45:30
回答 2查看 671关注 0票数 1

来自网站的HTML

代码语言:javascript
复制
    <ul id="blahlist">
    <li><a href="http://blahblah.com">blah blah</a></li>
    <li><a href="http://blahblah2.com">blah blah 2</a></li>
    ......
    </ul>

我的代码

代码语言:javascript
复制
$dom = new simple_html_dom();
$dom->load_file( "blah.html" );

    $div_category = $dom->find("#blahlist");

    foreach ($div_category as &$ul){
    $a_list = $ul->find("a");
    foreach ( $a_list as &$anchor){
        $csv_array=array($anchor->plaintext, $anchor->getAttribute("href") );
        fputcsv($csv_out, $csv_array);
        print_r($anchor);
    }

问题是它只显示第一行(第一行),而不显示blahlist中列表的其余部分。我做错了什么吗?与可能在第一行之后停止的<li>有关吗?

EN

Stack Overflow用户

发布于 2011-11-15 19:11:10

使用正则表达式抓取:

代码语言:javascript
复制
$html = <<<EOF
<ul id="blahlist">
    <li><a href="http://blahblah.com">blah blah</a></li>
    <li><a href="http://blahblah2.com">blah blah 2</a></li>
    <li><a href="http://blahblah2.com">blah blah 3</a></li>
    <li><a href="http://blahblah2.com">blah blah 4</a></li>
</ul>
EOF;

$ul_id = "blahlist";

if (preg_match("#<ul[^<>]+id=[\"']?{$ul_id}[\"']?[^<>]*>([\s\S]+?)</ul>#i", $html, $match)) 
{
    $lis = $match[1];
    preg_match_all("#<li[^<>]*>\s*<a[^<>]+href=[\"']?([^<>\"']+)[\"']?[^<>]*>([\s\S]+?)</a>#i", $lis, $matches);
    foreach ($matches[1] as $k => $href) {
        $href = strip_tags($href);
        $text = strip_tags($matches[2][$k]);
        print "$text [$href]<br>";
    }
}

您只需在以下行编辑ul列表的id:

代码语言:javascript
复制
$ul_id = "blahlist";

结果:

代码语言:javascript
复制
blah blah [http://blahblah.com]
blah blah 2 [http://blahblah2.com]
blah blah 3 [http://blahblah2.com]
blah blah 4 [http://blahblah2.com]
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8134300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档