【发布时间】:2025-12-10 04:45:01
【问题描述】:
我对如何从 HTML 页面中提取特定的 href 链接有点困惑。当然有很多示例,但它们似乎涵盖了在页面上只有一个时收集 href 或收集所有链接。
因此,我目前使用 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>
基本上我正在尝试创建一个文本爬虫/抓取工具来检索链接。我正在使用的当前页面从主页开始,导航栏的侧面有链接。导航栏中的那些链接是我想要访问的,所以我可以下载每个页面的内容,然后检索我正在寻找的真实数据。所以这只是一项大的解析工作,我在解析方面很糟糕。如果我能弄清楚如何解析第一个主页面,那么我将能够解析子页面。
我不想让任何人只给我答案,我只想知道在这种情况下有什么好的解析方法。 IE 如何将解析范围缩小到仅这些标签,然后有什么好的动态方法来存储这些链接以便我以后可以访问它们?我希望这是有道理的。
编辑:嗯,我现在尝试使用 HtmlAgilityPack,但很困惑。据我所知,这将检索我加载的页面中的所有 <div class="acTrigger"> 节点:
var div = html.DocumentNode.SelectNodes("//div[@class='acTrigger']");
下一个问题是我如何进入<div> 标记和<a> 标记,然后检索href 值并存储它。
【问题讨论】:
标签: c# html parsing web-crawler href