【问题标题】:HTML Scraping with HTML Agility Pack使用 HTML 敏捷包进行 HTML 抓取
【发布时间】:2011-11-30 22:49:12
【问题描述】:

谁能告诉我使用 HTMLAgilityPack 获取内容的最佳方法,我在下面提到的 html 中。

在提供的 HTML 中,我需要抓取 ID“img”的 value 并设置 xy 的值,以便它们在另一个函数中使用。

相关的HTML是

<div id="values">
<input type="hidden" id="x" name="x" value='0' />
<input type="hidden" id="y" name="y" value='0' />
<input type="hidden" id="img" name="img" value="86932" />
<input type="hidden" id="source" name = "source" value="center" />

这些值被发送到下面显示的 javascript 中的函数

submitClick(document.getElementById("img").getAttribute("value"), 
              document.getElementById("x").getAttribute("value"), 
              document.getElementById("y").getAttribute("value"), 
              'tiled'  );

有人可以告诉我应该如何进行吗...

我已经编写了以下代码来获取页面的 html 数据

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
    result = reader.ReadToEnd();
}
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new StringReader(result));
HtmlNode root = doc.DocumentNode;

现在我已经有了根,我应该如何搜索参数然后通过 GET 发送它们。

【问题讨论】:

    标签: c# ajax web-scraping html-agility-pack


    【解决方案1】:

    在上面的示例代码中从您离开的地方开始,您可以像这样获取值

    string imgValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"img\"]").GetAttributeValue("value", "0");
    string xValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"x\"]").GetAttributeValue("value", "0");
    string yValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"y\"]").GetAttributeValue("value", "0");
    

    上面的第一个例子基本上是说找到第一个类型为“input”的节点,它的“id”属性等于“img”,然后给我它的“value”属性的值。

    然后只需附加到目标 URL 并发送 Get 请求,就像您获取初始 HTML 一样。

    【讨论】:

    • 嘿,非常感谢...但是你能告诉我一件事吗...我有一个像这样的元素
      在这我如何检测 src ?
    • 我在答案中添加了一些可能有帮助的解释。但具体来说,您可以获得“src”属性的值,例如这个字符串 imgValue = doc.DocumentNode.SelectSingleNode("//img[@id = \"captcha_img\"]").GetAttributeValue("src", "0" );
    【解决方案2】:

    我不会为此使用 Html Agility Pack,因为我不知道如何让它反馈给原始网站。相反,我会使用WatiN。 WatiN 是为驱动浏览器而构建的,用于测试目的,但当我必须抓取我无法控制的网站(例如 Facebook 或 Wal-Mart)时,我发现它非常有用。缺点是它正在驱动一个实际的浏览器窗口,所以它不是你对用户隐藏的东西。好处是您可以轻松模拟鼠标点击和表单字段文本条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多