2017-02-23 47 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();