2017-02-23 9 views
4

HTMLページから特定のhrefリンクを抽出する方法についてちょっと混乱します。確かに多くの例がありますが、ページ上に1つだけある場合はhrefを集めるか、すべてのリンクを集めるかのいずれかをカバーするようです。htmlから特定のhrefリンクを取得するC#

私は現在、HttpWebRequest,HttpWebResponse、およびStreamReaderを使用してHTMLファイルをテキストファイルにプッシュします。

私の使っている小さなサンプルがあります。私の選択したURLをダウンロードしてテキストファイルに保存するだけです。

protected void btnURL_Click(object sender, EventArgs e) 
{ 
    string url = txtboxURL.Text; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    StreamReader sr = new StreamReader(response.GetResponseStream()); 
    //lblResponse.Text = sr.ReadToEnd(); 
    string urldata = sr.ReadToEnd(); 

    if (File.Exists(@"C:\Temp\test.txt")) 
    { 
     File.Delete(@"C:\Temp\test.txt"); 
    } 
    File.Create(@"C:\Temp\test.txt").Close(); 
    File.WriteAllText(@"C:\Temp\test.txt", urldata); 


    sr.Close(); 
    response.Close(); 
} 

私はhrefのためのテキストファイル全体を検索することができますが、そこにそれらの多くは、各ページにある、と私が探しているものは<nav>タグに区画され、その後、彼らはすべてでありますソートのこのような同じクラスで<div>タグ:

<nav class="deptVertNav> 
     <div class="acTrigger"> 
       <a href="*this is what I need to get*" .... 
       .... 
       </a> 
     </div> 
     <div class="acTrigger"> 
       <a href="*etc*" .... 
       .... 
       </a> 
     </div> 
     <div class="acTrigger"> 
       <a href="*etc*" .... 
       .... 
       </a> 
     </div> 
</nav> 

は基本的に私はリンクを取得するために、テキストクローラ/スクレーパーを作成しようとしています。私が作業している現在のページは、ナビゲーションバーの横にリンクがあるメインページから始まります。ナビゲーションバーのこれらのリンクは、それぞれのページのコンテンツをダウンロードしてから、私が探している実際のデータを取得するために使いたいものです。だから、これはただ一つの大きな構文解析仕事であり、私は解析するのがひどいです。この最初のメインページを解析する方法を理解できれば、サブページを解析することができます。

私は誰も私に答えを与えたくありません、私はこの状況でどのような良い解析方法があるのか​​知りたいだけです。私はどのようにこれらのタグだけに構文解析を絞り込み、後でそれらにアクセスできるようにそれらのリンクを格納するための良い動的な方法は何ですか?私はこれが理にかなってほしい。

編集:さて、私は今、多くの混乱でHtmlAgilityPackを使用しようとしています。

var div = html.DocumentNode.SelectNodes("//div[@class='acTrigger']"); 

次の質問は、私は<div>タグ内と<a>タグに取得する方法で、その後、hrefを取得:私の知る限りでは、これは私がロードするページ内にある<div class="acTrigger">あるすべてのノードを取得します値を入力して保存します。

答えて

0

テキストファイルを手動で解析する代わりに、HTMLをHtmlDocumentコントロール(https://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument(v=vs.110).aspx)またはWebブラウザーコントロール(https://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser(v=vs.110).aspx)に配置することをお勧めします。これにより、すでに解析された要素にアクセスすることができます。そこから適切なクラスを持つすべてのDIV要素を簡単に見つけ出し、その中のA要素を簡単に見つけることができます。

0

Selenium Web Driverライブラリをご覧ください。次に、必要に応じてURLを取得します。

IWebElement anchorUrl1 = driver.FindElement(By.XPath("//nav[@class='deptVertNav']/div[1]/a[1]")); 
string urlText1 = anchorUrl1.Text; 
IWebElement anchorUrl2 = driver.FindElement(By.XPath("//nav[@class='deptVertNav']/div[2]/a[1]")); 
string urlText2 = anchorUrl2.Text; 

あなたがしたいすべてが、その後、それらをクリックした場合:

driver.FindElement(By.XPath("//nav[@class='deptVertNav']/div[1]/a[1]")).Click(); 
関連する問題