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.comtitlehttp://url.pdfauthor.comおよびauthorクラスのダウンロードに pdf の URL がある場合のみ取得したい。

コードは次のとおりです。

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

試してデバッグするために印刷ステートメントを追加しようとしましたか? ざっと見てみると、次の 3 番目のループがあることがわかります。

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

十分に戻るつもりはないので、何にも一致しません (#ctl div にあるように見えますか?)。レベルが 3 つ上がったら、本当に兄弟要素を探したいと思われますか?

于 2012-09-29T00:00:15.583 に答える