2011-01-05 7 views
1

私はHTMLアジリティパックの新機能を使用していますので、次にどこへ行くのか助けが必要です。私はhref(私が探していたURL文字列を知っている)から値を引き出すなどの簡単なことをいくつか行い、使用されている特定のクラスに基づいてスパンの値を引き出すことができます。しかし、私は、HTMLアジリティパックをどのように使用するか理解していません。高度なHTMLアジリティパックの使用

ここでは、私が徹底的に調べているコードの実際の塊があります。私は、私が探しているものを実証するために、セルにダミーのデータを入れました。

以下を抽出する最も良い方法は何ですか: 1.)会社名? 2.)電話番号? 3.)メールアドレス?

HTML ....

<td> 
    <!-- Company Info --> 
    <table cellpadding="0" cellspacing="0" border="0"> 
     <tr> 
      <td class="black"> 
       <table cellspacing="1" cellpadding="0" border="0" width="370"> 
        <tr> 

         <th>COMPANY NAME</th> 
        </tr> 
        <tr> 
         <td class="search"> 

          <table cellpadding="5" cellspacing="0" border="0" width="100%"> 
           <tr> 
            <td> 
             <table cellpadding="1" cellspacing="0" border="0" width="100%"> 

              <tr> 
              <td colspan="2" align="center">Un-needed Links...</td> 
              </tr> 
              <tr> 
               <td align="center" colspan="2"><hr></td> 

              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Contact Person&nbsp;<img src="/images/icon_contact.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;Judy Smith</td> 
              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Phone Number&nbsp;<img src="/images/icon_phone.gif" align="absmiddle">&nbsp;:</font></b></td> 

               <td align="left" width="100%">&nbsp;555-555-5555</td> 
              </tr> 

              <tr> 
               <td align="right" nowrap><b><font color="FF0000">E-mail Address&nbsp;<img src="/images/icon_email.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;<a HREF="mailto:[email protected]">[email protected]</a></td> 
              </tr> 
              <tr> 

               <td align="center" colspan="2"><hr></td> 
              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Home Office Location&nbsp;<img src="/images/icon_home.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;ATLANTA, GA</td> 
              </tr> 
              <tr> 

               <td align="right" nowrap><b><font color="FF0000">Home Office Phone&nbsp;<img src="/images/icon_home.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;555-555-5555</td> 
              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Home Office Fax&nbsp;<img src="/images/icon_home.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;666-666-6666</td> 

              </tr> 
              <tr> 
               <td align="center" colspan="2"><hr></td> 
              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Broker MC Number&nbsp;<img src="/images/icon_number.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;123456</td> 

              </tr> 
              <tr> 
               <td align="right" nowrap><b><font color="FF0000">Carrier MC Number&nbsp;<img src="/images/icon_number.gif" align="absmiddle">&nbsp;:</font></b></td> 
               <td align="left" width="100%">&nbsp;654321</td> 
              </tr> 

             </table> 
            </td> 

           </tr> 
          </table> 
         </td> 
        </tr> 
       </table> 
      </td> 
     </tr> 
    </table> 
    <br> 

    <!-- Starting Point --> 
    <table cellpadding="0" cellspacing="0" border="0"> 
     <tr> 
      <td class="black"> 
       <table cellspacing="1" cellpadding="0" border="0" width="370"> 
        <tr> 
         <th>Starting Point</th> 
         <th>Available</th> 

        </tr> 
        <tr> 
         <td class="search" width="270">&nbsp;<b>ABBEVILLE, GA&nbsp;</b></td> 
         <td class="search" align="center" width="100"><span style="color: forestgreen">&nbsp;1/5/11&nbsp;</span></td> 
        </tr> 
       </table> 
      </td> 
     </tr> 

    </table> 
    <br> 
    <!-- Destination Point --> 
    <table cellpadding="0" cellspacing="0" border="0"> 
     <tr> 
      <td class="black"> 
       <table cellspacing="1" cellpadding="0" border="0" width="370"> 
        <tr> 
         <th>Destination Point</th> 

         <th>Direction</th> 
        </tr> 
        <tr> 
         <td class="search" width="270">&nbsp;<b>ATLANTA, GA&nbsp;</b></td> 
         <td class="search" align="center" width="100"><span style="color: FF0000">&nbsp;&nbsp;</span></td> 
        </tr> 
       </table> 
      </td> 

     </tr> 
    </table> 
    <br> 
    <!-- Truck Details --> 
    <table cellpadding="0" cellspacing="0" border="0"> 
     <tr> 
      <td class="black"> 
       <table cellspacing="1" cellpadding="0" border="0" width="370"> 
        <tr> 

         <th>Truck Details</th> 
        </tr> 
        <tr> 
         <td class="search"> 
          <table cellpadding="5" cellspacing="0" border="0"> 
           <tr> 
            <td> 
             <table cellpadding="0" cellspacing="0" border="0"> 

              <tr> 
               <td align="right"><b>Date Posted&nbsp;:</b></td> 
               <td align="left">&nbsp;&nbsp;1/5/2011 10:34:48 AM</td> 
              </tr> 
              <tr> 
               <td align="right"><b>Quantity&nbsp;:</b></td> 

               <td align="left">&nbsp;&nbsp;1</td> 
              </tr> 
              <tr> 
               <td align="right"><b>Equipment Type&nbsp;:</b></td> 
               <td align="left">&nbsp;&nbsp;FT</td> 
              </tr> 
              <tr> 

               <td align="right"><b>Load Size&nbsp;:</b></td> 
               <td align="left">&nbsp;&nbsp;Full</td> 
              </tr> 
              <tr> 
               <td align="right" valign="top"><b>Special Information&nbsp;:</b></td> 
               <td align="left">&nbsp;&nbsp;</td> 

              </tr> 
             </table> 
            </td> 
           </tr> 
          </table> 
         </td> 
        </tr> 
       </table> 
      </td> 

     </tr> 
    </table> 
    <br> 
</td> 

....詳細HTML

答えて

4

さて、あなたは本当にあなたがグーグルできる:-)能力をこするHTMLの敏捷性パックのadvandageを取るためにXPATHを理解する必要が「XPATHの例」を参照してください。

スクリーンスクレイピングに関する質問に焦点を当てて、難しいのは、得たい情報の中で最も差別的なxpath表現であると考えるものを選択することです。ほとんどの場合、1つのソリューションだけではなく、ターゲットサイトのHTMLの進化にこだわるためにコードを更新する準備が必要です。

これは、不要なテキストにマッチするリスクを伴う非常に単純な表現と、擦り切れたHTMLの進化には寛容ではない弁別的な表現との間のトレードオフであり、一致するリスクはありません。

あなたの特定のテキストについては、これは良い現実世界の例であり、ここではそれをしないコードです:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(yourText); 

string companyName = doc.DocumentNode.SelectSingleNode("/td/table/tr/td/table/tr/th").InnerText; 
Console.WriteLine("company name=" + companyName); 

// another way 
companyName = doc.DocumentNode.SelectSingleNode("//td[@class='black']/table/tr/th").InnerText; 
Console.WriteLine("company name=" + companyName); 

// a more advanced XPATH expression, means 
// "Select a TD tag anywhere in the doc that has a preceding sibling of TD type with a B chid, with a FONT child with inner text starting with 'Phone Number'" 
string phoneNumber = doc.DocumentNode.SelectSingleNode("//td[starts-with(preceding-sibling::td/b/font/text(), 'Phone Number')]").InnerText; 
Console.WriteLine("phone Number=" + phoneNumber); 

// same kind of story but go down the next A tag 
string email = doc.DocumentNode.SelectSingleNode("//td[starts-with(preceding-sibling::td/b/font/text(), 'E-mail')]/a").InnerText; 
Console.WriteLine("email=" + email); 

はPS:常にXPATHで使用されるタグを期待してHTMLの敏捷性パックを注意してくださいたとえ元のHTMLテキストに含まれていなくても、式は小文字にする必要があります。

ご覧のとおり、ここでは2つの異なる式を使用して会社名を取得しています。どちらもサンプルで動作しますが、新しいタグが途中で追加された場合、最初のタグは抵抗しません。もう1つは将来性がありますが、変更される可能性のあるCSSクラスタグに基づいています。それは常にトレードオフです。

電話番号&電子メールは似ていますが、XPATHの能力を示します。

+0

これはすばらしい答えです。複数の例をありがとうございました。 – WildBill

関連する問題