C# 高级HTML敏捷包使用

C# 高级HTML敏捷包使用,c#,screen-scraping,html-agility-pack,C#,Screen Scraping,Html Agility Pack,我对HTML敏捷包还很陌生,所以我需要一些关于下一步的帮助。我可以做一些简单的事情,比如从href中提取一个值(知道我要查找的url字符串),并且可以根据所使用的特定类提取span中的值。但是我不明白如何在有大量标签的情况下使用HTML Agility Pack,或者thre不是一个真正可靠的锚 这是我正在浏览的一段实际代码。我在单元格中放置了虚拟数据,以演示我正在寻找的内容 提取以下信息的最佳方法是什么: 1)公司名称 电话号码 3.)电子邮件地址 HTML 公司名称 不需要的链接。。。

我对HTML敏捷包还很陌生,所以我需要一些关于下一步的帮助。我可以做一些简单的事情,比如从href中提取一个值(知道我要查找的url字符串),并且可以根据所使用的特定类提取span中的值。但是我不明白如何在有大量标签的情况下使用HTML Agility Pack,或者thre不是一个真正可靠的锚

这是我正在浏览的一段实际代码。我在单元格中放置了虚拟数据,以演示我正在寻找的内容

提取以下信息的最佳方法是什么:

1)公司名称

电话号码

3.)电子邮件地址

HTML


公司名称
不需要的链接。。。

联系人 : 朱迪·史密斯 电话号码: 555-555-5555 电子邮件地址:
家庭办公地点: 佐治亚州亚特兰大 家庭办公室电话: 555-555-5555 内政部传真: 666-666-6666
经纪人MC编号: 123456 承运人MC编号: 654321
起点 可获得的 佐治亚州阿贝维尔 1/5/11
目的地 方向 佐治亚州亚特兰大
卡车详细信息 公布日期: 2011年1月5日上午10:34:48 数量: 1. 设备类型: 英尺 负载大小: 满的 特别资料:

…更多HTML

好吧,您必须了解XPATH才能真正利用HTML敏捷包抓取功能:-)您可以从Google开始

专注于屏幕抓取问题,棘手的部分是为您想要获得的信息选择您认为最有区别的xpath表达式。大多数情况下,解决方案不止一个,您必须准备好更新代码,以适应目标站点HTML的发展

因此,这是一种在非常简单的表达式与不需要的文本相匹配的风险之间的折衷,以及过于歧视性的表达式,它们不能容忍被删除的HTML中的演变,它们与任何内容都不匹配的风险

对于您的特定文本,这是一个很好的现实示例,下面是一段代码:

HtmlDocument doc=新的HtmlDocument();
doc.LoadHtml(yourText);
字符串companyName=doc.DocumentNode.SelectSingleNode(“/td/table/tr/td/table/tr/th”).InnerText;
Console.WriteLine(“company name=“+companyName”);
//另一种方式
companyName=doc.DocumentNode.SelectSingleNode(//td[@class='black']/table/tr/th”).InnerText;
Console.WriteLine(“company name=“+companyName”);
//更高级的XPATH表达式,表示
//“在文档中的任何位置选择一个TD标记,该标记前面有一个带有B chid的TD类型同级,字体子级的内部文本以‘电话号码’开头”
字符串phoneNumber=doc.DocumentNode.SelectSingleNode(//td[开头为(前面的同级::td/b/font/text(),'Phone Number'))”)。InnerText;
Console.WriteLine(“电话号码=”+电话号码);
//同样的故事,但下一个故事会被贴上标签
string email=doc.DocumentNode.SelectSingleNode(//td[以(前面的同级::td/b/font/text(),'E-mail')开头]/a”).InnerText;
Console.WriteLine(“email=”+email);
PS:请注意HTML Agility Pack始终希望XPATH表达式中使用的标记是小写的,即使它们不在原始HTML文本中

如您所见,这里使用两个不同的表达式检索公司名称。它们都对样本有效,但如果添加了新标签,第一个将不会抵抗