0

html页面:

<div class="title-download">
    <div id="ctl " class="title">
        <h3>
            <a id="ct2" href="http://url1.com">title</a>
            <span id="ct3" class="citation">(<a id="ct4 " href=" ">Citations</a>)</span></h3>
    </div>
    <div id="ct4" class="download">
        <a id="ct5 " title=" " href="http://url.pdf" img id="ct6" class="small-icon" src=" " /></a>
    </div>
</div>
<div class="content">
    <a class="author " href="author.com">author</a><span class="span-break" >, </span><a class="author2.com " href="http://author2.com">author2</a>
</div>

我想得到http://url1.com, title, http://url.pdf,如果只有类下载有 pdf url author.comauthor

这是代码:

foreach($html->find('span[class=citation]') as $link1){
    foreach($link1->parent()->parent()->parent()->find('.download a') as $link2){
        foreach ($link1->parent()->find('div[class=content] a') as $a ){
            if(strtolower(substr($link2->title, strrpos($link2->href, '.'))) === '.pdf') {
                $link1 = $link1->prev_sibling();
                $a = $link1->next_sibling();
                $title = strip_tags($link1->plaintext);
                $linkWeb = strip_tags($link1->href);
                $author= strip_tags($a->plaintext);
                $linkAuthor= strip_tags($a->href); 
                $pdfLink = strip_tags($link2->title); 
            }
        }
    }
}

我得到了空白结果,请您帮帮我,请告诉我错误的地方。提前致谢 :)

4

2 回答 2

1

由于页面填充了具有类 title-download 的 div,因此您应该能够按如下方式重写循环:

foreach( $html->find('div[class=title-download]') as $div){
    $dowloadlink = $div->find('div[class=download] a', 0);

    if($dowloadlink != null){

        if(strtolower(substr($downloadlink->href, strrpos($downloadlink->href, '.'))) === '.pdf'){
            $content = $div->find('div[class=content] h3 a', 0);

            $title = strip_tags($content->plaintext);
            $linkWeb = strip_tags($content->href);

            $authorlink = $div->next_sibling().find('a', 0);
            $author = strip_tags($authorlink->plaintext);
            $linkAuthor= strip_tags($authorlink->href);

            $pdfLink = strip_tags($downloadlink->href); 
        }

    }

}
于 2012-09-29T00:33:10.157 回答
0

您是否尝试过添加打印语句来尝试调试?快速浏览一下,您可以看到第三个循环:

foreach ($link1->parent()->parent()->find('div[class=content] a') as $a) {

不会匹配任何东西,因为你不会回到足够远的地方(看起来它会在#ctl div?)。看起来你真的想在升级三个级别后寻找兄弟元素?

于 2012-09-29T00:00:15.583 回答