0

複数ページの記事のリンクを解析して、それらを自動的にクリックして記事のコンテンツ全体を抽出しようとしています。最後の質問役立つ回答に関して、私は機械化を使用しています。

ページネーション リンクを検索するにはどうすればよいですか? 各記事には、次のような異なるリンク アーキテクチャが含まれる場合があります。

ゼイトンライン:

<a id="hp.article.bottom.paginierung.2" class="pn-forward pn-button" title="Vor" href="http://www.zeit.de/politik/ausland/2013-01/Syrien-Fotografie-Reportage/seite-2">Vorwärts</a>

アルテクニカ:

<a href="http://arstechnica.com/information-technology/2013/01/help-ive-got-windows-8-and-i-miss-my-start-menu/2"><span class="next">Next <span class="arrow">→&lt;/span></span></a>

IGN:

<a href="http://www.ign.com/articles/2013/01/03/the-ultimate-2013-movie-preview?page=2">Next&nbsp;»</a>

IGN リンクの場合、リンク テキストが含まれているため、リンクを解析するのは比較的簡単ですNext。しかし、他のリンクはどうですか?ポケット、読みやすさ、インスタペーパーが複数ページのコンテンツを抽出しているため、実行可能であることはわかっています。

少しお役に立てば幸いです。

4

1 に答える 1

1

私はこれのために1つの関数を書きます

function proccessURL($ParentURL,$URL){
   $parse_url=parse_url($URL);
    if(@$parse_url['host']==""){
        $Parent_URL=parse_url($ParentURL);
        $path=explode("/",@$parse_url['path']);
        $redirect=0;    
        $lkey=0;
        $flag=false;
        while(list($key,$val)=each($path)){
            if($val==".." or $val=="." or $val=="..."){
                $redirect++;
                $lkey=$key;
                $flag=true;
            }else{
                break;
            }
        }
        if($flag){
           $matches=explode("/",$Parent_URL['path']);
           end($matches);
           $b=each($matches);
           $n=$b['key'];
           $url='';
           for($i=0;$i<$n-$redirect;$i++){
               $url.=$matches[$i]."/";
           }   
           for($i=$redirect+1;next($path);$i++){
               $url.=$path[$i]."/";
           }
           rtrim($url,"/");
           $parse_url['path']=$url;
        }else{
            $parse_url['path']="/".@$parse_url['path'];
        }
    }else{
        $Parent_URL['scheme']=$parse_url['scheme'];
        $Parent_URL['host']=$parse_url['host'];
    }
    //print_r($parse_url);
    if(@$parse_url['query']!=""){
        $parse_url['query']="?".@$parse_url['query'];
    }
    if(@$parse_url['fragment']!=""){
        $parse_url['fragment']="#".@$parse_url['fragment'];
    }
    return $Parent_URL['scheme']."://".@$Parent_URL['host'].@$parse_url['path'].@$parse_url['query'].@$parse_url['fragment'];
}

この関数はリンクアドレスを解決します

サンプル:

$CorrectLink=proccessURL("http://www.sepidarcms.ir/kernel/","../plugin/1.php");

出力は「http://www.sepidarcms.ir/plugin/1.php」です。これで、preg_match_allによってURLを解析できます。

$html="Your HTML Str";
$URL="Your HTML Page Link";
preg_match_all("/href=\"([^\"]*)\"/is", $html, $matches);
while(list($key,$val)=each($matches[1])){
$val=proccessURL($URL,$val);
    echo $val;
}

このコードはあなたのためにすべてのhrefURLを正しくリストします

于 2013-01-17T12:10:34.707 に答える