Скребок HTML с пакетом гибкости HTML

ajax c# html-agility-pack web-scraping

Вопрос

Может кто-нибудь сказать мне лучший способ получить содержимое, используя HTMLAgilityPack, о котором я упоминал ниже из html.

В представленном HTML мне нужно очистить value идентификатора «img» и установить значения для x и y чтобы они использовались в другой функции.

Соответствующий 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");

Где первый пример выше в основном говорит найти первый узел типа «вход», который имеет атрибут «id», равный «img», и получить значение его атрибута «значение».

А затем просто добавьте URL-адрес dest и отправьте запрос Get, как вы это сделали, чтобы получить исходный HTML.


Популярные ответы

Я бы не использовал Html Agility Pack для этого, потому что я не знаю, как вернуть его на исходный веб-сайт. Вместо этого я бы использовал WatiN . WatiN построен для управления браузером для тестирования, но я нашел его чрезвычайно полезным, когда мне приходится очищать веб-сайты, которые находятся вне моего контроля (например, Facebook или Wal-Mart). Даунсайд является то , что она является движущей силой фактического окна браузера , так что это не то , что вы скрываете от пользователя. Поверхность заключается в том, что вы можете легко имитировать щелчки мыши и формировать текстовые записи полей.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему