有一个我们从中购买小部件的网站,该网站在其自己的网页上提供了每个部分的详细信息。示例:http ://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND 。我必须找到他们在我们数据库中的所有零件,并将制造商和制造商零件编号值添加到他们的字段中。
有人告诉我,Visual Basic 有一种方法可以访问网页并提取信息。如果有人能指出我从哪里开始的正确方向,我相信我能弄清楚这一点。
谢谢。
有一个我们从中购买小部件的网站,该网站在其自己的网页上提供了每个部分的详细信息。示例:http ://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND 。我必须找到他们在我们数据库中的所有零件,并将制造商和制造商零件编号值添加到他们的字段中。
有人告诉我,Visual Basic 有一种方法可以访问网页并提取信息。如果有人能指出我从哪里开始的正确方向,我相信我能弄清楚这一点。
谢谢。
我同意htmlagilitypack是实现这一目标的最简单方法。它比仅使用正则表达式更不容易出错。以下将是我如何处理刮擦。
下载 htmlagilitypack*dll 后,新建一个应用,通过 nuget 添加htmlagilitypack,并引用。如果您可以使用 Chrome,它将允许您检查页面以获取有关您的信息所在位置的信息。右键单击您要捕获的值并查找它所在的表(按照 HTML 向上一点)。
以下示例将从“定价”表中的该页面中提取所有值。我们需要知道表的XPath值(该值用于指示 htmlagilitypack 要查找的内容),以便我们创建的文档查找我们的特定值。这可以通过找到您的值所在的任何结构并右键单击复制 XPath 来实现。由此我们得到...
//*[@id="pricing"]
请注意,有时您从 Chrome 获得的 XPath 可能相当大。您通常可以通过查找您的值所在的表的独特之处来简化它。在这个例子中,它是“id”,但在其他情况下,它很容易是标题或类或其他任何东西。
这个 XPath 值查找 id 等于定价的东西,即我们的表。当我们进一步观察时,我们看到我们的值在 tbody、tr 和 td 标签内。HtmlAgilitypack 不适用于 tbody 所以忽略它。我们的新 XPath 是...
//*[@id='pricing']/tr/td
该 XPath 表示在页面中查找定价 ID,然后在其 tr 和 td 标记中查找文本。现在我们添加代码...
Dim Web As New HtmlAgilityPack.HtmlWeb
Dim Doc As New HtmlAgilityPack.HtmlDocument
Doc = Web.Load("http://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND")
For Each table As HtmlAgilityPack.HtmlNode In Doc.DocumentNode.SelectNodes("//*[@id='pricing']/tr/td")
Next
要提取值,我们只需引用在循环中创建的表值,它是内部文本成员。
Dim Web As New HtmlAgilityPack.HtmlWeb
Dim Doc As New HtmlAgilityPack.HtmlDocument
Doc = Web.Load("http://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND")
For Each table As HtmlAgilityPack.HtmlNode In Doc.DocumentNode.SelectNodes("//*[@id='pricing']/tr/td")
MsgBox(table.InnerText)
Next
现在我们有弹出值的消息框......您可以切换消息框以填充数组列表或您希望存储值的任何方式。现在只需对您希望获得的任何其他表格执行相同的操作。
请注意,创建的 Doc 变量是可重用的,因此如果您想在同一页面中循环浏览不同的表,则不必重新加载页面。这是一个好主意,特别是如果您提出许多请求,并且不想破坏网站,并且如果您要自动执行大量抓取,则请求之间会留出一些时间。
刮痧真的就是这么简单。这就是基本思想。玩得开心!
Html Agility Pack将成为您的朋友!
什么是 Html Agility Pack (HAP)?
这是一个敏捷的 HTML 解析器,它构建了一个读/写 DOM 并支持普通的 XPATH 或 XSLT(你实际上不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,允许您解析“网络之外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。
查看您提供的示例页面的源代码,他们在标记中使用 HTML5 微数据。我搜索了更多内容CodePlex
,发现了一个可能也有帮助的微数据解析器:MicroData Parser