使用HTML Agility Pack进行HTML Scraping

ajax c# html-agility-pack web-scraping

有人可以告诉我使用HTMLAgilityPack获取内容的最佳方法,我在下面从html中提到。

在HTML提供我需要刮value的ID“IMG”的并设置值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发送它们。

一般承认的答案

从您上面的示例代码中提取到的位置,您可以抓住这样的值

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”属性的值。

然后只需附加到dest URL并发送Get Request,就像获取初始HTML一样。


热门答案

我不会使用Html Agility Pack,因为我不知道如何将它反馈给原始网站。相反,我会使用WatiN 。 WatiN是为了驱动浏览器进行测试而设计的,但是当我不得不刮掉我无法控制的网站(例如Facebook或沃尔玛)时,我发现它非常有用。缺点是它正在驱动一个实际的浏览器窗口,因此它不是你向用户隐藏的东西。好处是,您可以轻松模拟鼠标点击并形成字段文本条目。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因