Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php如何刮内部<;李>&书信电报;a>;使用simplehtmldom?_Php_List_Loops_Foreach_Scrape - Fatal编程技术网

php如何刮内部<;李>&书信电报;a>;使用simplehtmldom?

php如何刮内部<;李>&书信电报;a>;使用simplehtmldom?,php,list,loops,foreach,scrape,Php,List,Loops,Foreach,Scrape,来自网站的HTML <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> 问题是它只显示第一行(第一行),而不

来自网站的HTML

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

    如何

    $dom->find("#blahlist li");
    

    使用正则表达式“抓取”所有
    li
    s下的
    #blahlist

    刮取:

    $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>";
        }
    }
    
    结果:

    blah blah [http://blahblah.com]
    blah blah 2 [http://blahblah2.com]
    blah blah 3 [http://blahblah2.com]
    blah blah 4 [http://blahblah2.com]
    

    我想你应该再详细说明一下,不是每个人都知道,
    DOM
    @Moe Sweet我刚试过,结果还是一样的。你能解释一下你的意思吗?我不知道我能为那些了解DOM的人说些什么?@事实上,这不是DOM,而是SimpleHTMLDom。SimpleHTMLDom与DOM无关。DOM是一个与W3C语言无关的接口,SimpleHTMLDom没有实现它。@事实是的,我假设是这样,但它不是OP使用的。PHP的DOM扩展是W3C接口的实现。它没有find方法,也不支持CSS选择器查询。这就是为什么我说他应该详细说明的原因,我是那些会犯错误的人之一:PSuggested第三方替代品,而不是字符串解析:,谢谢你的回答,但我更喜欢加载simpleHTMLDom而不是正则表达式。原因是因为我的下一个函数将从读取我发布的这个函数创建的csv中获取url内的所有内容。如果有办法的话,我可能会更习惯于使用Dom而不是正则表达式。
    $ul_id = "blahlist";
    
    blah blah [http://blahblah.com]
    blah blah 2 [http://blahblah2.com]
    blah blah 3 [http://blahblah2.com]
    blah blah 4 [http://blahblah2.com]