2017-02-23 49 views
4

我對如何從HTML頁面提取特定的href鏈接感到困惑。當然有很多例子,但是它們似乎涵蓋了當頁面上只有一個頁面時收集href或收集所有鏈接。從HTML中檢索特定的href鏈接C#

因此,我目前使用HttpWebRequestHttpWebResponseStreamReader將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> 

基本上我試圖創建一個文本履帶式/刮刀來檢索鏈接。我正在使用的當前頁面從一個主頁面開始,並在導航欄上向下鏈接。導航欄中的這些鏈接是我想要獲得的,因此我可以下載每個頁面的內容,然後檢索我正在查找的真實數據。所以這只是一個大的解析工作,而且我在解析時很糟糕。如果我能弄清楚如何解析這個第一主頁,那麼我將能夠解析子頁面。

我不想讓任何人給我答案,我只是想知道在這種情況下一個好的解析方法。 IE如何將分析縮小到只有這些標記,然後將存儲這些鏈接的好動態方式,以便以後可以訪問它們?我希望這是有道理的。

編輯:好吧,我現在試圖用很多困惑使用HtmlAgilityPack。據我所知,這將檢索所有的都是<div class="acTrigger">是頁I負載範圍內的節點:

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

下一個問題是我如何得到<div>標籤內,並進入<a>標籤,然後檢索href價值,並存儲它。

回答

0

看看Selenium Web Driver庫。然後根據需要抓取網址。

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();