2016-05-17 4 views
0

asp.netイントラネットをSharePointに移行し、PowerShellによる変換を自動化しています。Invoke-WebRequestを使用したスクレイピング

DIVタグ内のリンクをクラス名「topnav」でスクラップしたいだけです。ページ上のすべてではないのリンク

$url = "http://intranet.company.com" 
$page = Invoke-WebRequest -Uri $url 
$div_topnav = $page.ParsedHtml.getElementsByTagName('div') | ? {$_.className -match 'topnav'} 

は、これは私たちにtopnavのHTMLを取得しますが、アプリケーション・ノードからわずかアプリケーションへのリンクを抽出するために最善の方法? HOMEノードやDocumentsノードは必要ありませんか?

<div class="topnav" > 
<ul class="lev1 clearfix" > 
    <li class="lev1 pos1 first lev1_first"> 
     <a href="index.html">Home</a> 
    </li> 
    <li class="lev1 pos2 haschildren lev1_haschildren"> 
     <a href="index.html">Applications</a> 
     <ul> 
      <li class="lev2 pos1 first lev2_first"> 
       <a href="http://someurl.com">App 1</a> 
      </li> 
      <li class="lev2 pos2 haschildren lev2_haschildren"> 
       <a href="index.html">Training</a> 
       <ul class="lev3"> 
        <li class="lev3 pos1 lev3_pos1 first lev3_first"> 
         <a href="http://someurl.com">App 3</a> 
        </li> 
        <li class="lev3 pos2 lev3_pos2 last lev3_last"> 
         <a href="http://someurl.com">App 4</a> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    <li class="lev1 pos3 haschildren lev1_haschildren"> 
     <a href="index.html">Documents</a> 
     <ul> 
      <li class="lev2 pos1 first lev2_first"> 
       <a href="http://someurl.com">Doc 1</a> 
      </li> 
      <li class="lev2 pos2 haschildren lev2_haschildren"> 
       <a href="index.html">Training</a> 
       <ul class="lev3"> 
        <li class="lev3 pos1 lev3_pos1 first lev3_first"> 
         <a href="http://someurl.com">Doc 3</a> 
        </li> 
        <li class="lev3 pos2 lev3_pos2 last lev3_last"> 
         <a href="http://someurl.com">Doc 4</a> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 
</div> 
+0

結果を別の 'getElementByTagName( 'li')'にパイプライン接続してみましたか?何らかの理由で – Bum

+0

が動作しません。私はアジリティのパックに移動すると思う。このアプローチを使用するには時間がかかりすぎる。 – user2019423

答えて

0

私はあなたが欲しいものだと思う:

[xml]$div_topnav= 
@"<div class="topnav" > 
    <ul class="lev1 clearfix" > 
    <li class="lev1 pos1 first lev1_first"> 
     <a href="index.html">Home</a> 
    </li> 
    <li class="lev1 pos2 haschildren lev1_haschildren"> 
     <a href="index.html">Applications</a> 
     <ul> 
      <li class="lev2 pos1 first lev2_first"> 
       <a href="http://someurl.com">App 1</a> 
      </li> 
      <li class="lev2 pos2 haschildren lev2_haschildren"> 
       <a href="index.html">Training</a> 
       <ul class="lev3"> 
        <li class="lev3 pos1 lev3_pos1 first lev3_first"> 
         <a href="http://someurl.com">App 3</a> 
        </li> 
        <li class="lev3 pos2 lev3_pos2 last lev3_last"> 
         <a href="http://someurl.com">App 4</a> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
     <li class="lev1 pos3 haschildren lev1_haschildren"> 
      <a href="index.html">Documents</a> 
      <ul> 
       <li class="lev2 pos1 first lev2_first"> 
        <a href="http://someurl.com">Doc 1</a> 
       </li> 
       <li class="lev2 pos2 haschildren lev2_haschildren"> 
        <a href="index.html">Training</a> 
        <ul class="lev3"> 
         <li class="lev3 pos1 lev3_pos1 first lev3_first"> 
          <a href="http://someurl.com">Doc 3</a> 
         </li> 
         <li class="lev3 pos2 lev3_pos2 last lev3_last"> 
          <a href="http://someurl.com">Doc 4</a> 
         </li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
    </ul> 
</div> 
"@ 
($div_topnav.GetElementsByTagName("a") | ? "#Text" -Like "App *").href 

出力はアプリのすべてのあなたのリンクになります。

6行目のliタグに閉じたliタグがないため、PowerShellは投稿された$ div_topnavコンテンツを解析できませんでした(コードスニペットで修正済み)。

関連する問題