2015-11-11 2 views
1

Я использую HTMLElementCollection, HtmlElement, чтобы перебирать веб-сайт и использовать атрибуты Get/Set HTML-сайта и возвращать его в ListView. Можно ли получить значения с веб-сайта a и веб-сайта b, чтобы вернуть его в ListView?C# Получить значения с двух разных сайтов

HtmlElementCollection oCol1 = oDoc.Body.GetElementsByTagName("input"); 
foreach (HtmlElement oElement in oCol1) 
{ 
    if (oElement.GetAttribute("id").ToString() == "search") 
    { 
     oElement.SetAttribute("value", m_sPartNbr); 
    } 
    if (oElement.GetAttribute("id").ToString() == "submit") 
    { 
     oElement.InvokeMember("click"); 
    } 
} 

HtmlElementCollection oCol1 = oDoc.Body.GetElementsByTagName("tr"); 
foreach (HtmlElement oElement1 in oCol1) 
{ 
    if (oElement1.GetAttribute("data-mpn").ToString() == m_sPartNbr.ToUpper()) 
    { 
     HtmlElementCollection oCol2 = oElement1.GetElementsByTagName("td"); 
     foreach (HtmlElement oElement2 in oCol2) 
     { 
      if (oElement2 != null) 
      { 
       if (oElement2.InnerText != null) 
       { 
        if (oElement2.InnerText.StartsWith("$")) 
        { 
         string sPrice = oElement2.InnerText.Replace("$", "").Trim(); 
         double dblPrice = double.Parse(sPrice); 
         if (dblPrice > 0) 
          m_dblPrices.Add(dblPrice); 
        } 
       } 
      } 
     } 
    } 
} 
+2

Если я не понимаю вас, вы должны использовать ['HttpWebRequest'] (https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest (v = vs.110) .aspx), чтобы отправить запрос и получить ответ с внешнего веб-сайта. Вам будет необходимо проанализировать значение, которое вам нужно, хотя это не REST api или какой-либо другой API. Что вы подразумеваете под «получить ценности»? Определенные части страницы? REST api? –

+0

позволяет сказать, что я пошел на сайт Bestbuy.com и хотел разобрать цену на определенный продукт, а затем вернуть его в список. Я бы хотел сделать это с помощью bestbuy.com и Amazon.com и вернуть обе цены в список. – Emphatic

+1

Является ли HtmlAgilityPack в вашем будущем? https://htmlagilitypack.codeplex.com/ Примечание: у меня нет связи с ними. –

ответ

0

В одном из комментариев упомянул лучше было бы использовать HttpWebRequest для отправки запроса добраться до www.bestbuy.com или любого сайта. То, что он возвращает, - это полный HTML-код (что вы видите), который вы можете проанализировать. Такой подход заставляет вас не замаскировать слишком много запросов и не попасть в черный список. Если вам нужно щелкнуть по кнопке или ввести текстовое поле, лучше всего имитировать человеческий ввод, чтобы не попасть в черный список. Я бы предложил ввести простой javascript в заголовок или тело страницы и выполнить его из приложения, чтобы отправить событие onClick из этой кнопки (которое затем ответит новой страницей для разбора или отображения) или изменить свойство текста что нибудь.

этот пример находится в C++/cx, но изначально он исходил из примера C#. скрипт устанавливает имя пользователя и пароль текстовые поля затем нажмет кнопку для входа:

String^ script = "document.GetElementById('username-text').value='myUserName';document.getElementById('password-txt').value='myPassword';document.getElementById('btn-go').click();"; 
auto args = ref new Platform::Collections::Vector<Platform::String^>(); 
args->Append(script); 
create_task(wv->InvokeScriptAsync("eval", args)).then([this](Platform::String^ response){ 
    //LOGIN COMPLETE 
}); 

// примечания: WV = Webview

EDIT: как указывает абсолютный лучший подход должен был бы получить/Запросили апи. Я был удивлен, увидев, что сайт-масон указал на самых продаваемых разработчиков. Лично я только пытался работать с автозапчастями, которые либо смеются, заявляя, что я не могу себе это позволить, либо не знаю, о чем я прошу, и повесить трубку (при вызове корпоративной).

EDIT 2: в моем коде используется сайт autozone. Мне нужно было использовать инструменты для создания хрома (f12), чтобы получить имена имени пользователя, пароля и имени кнопки. Из инструментов разработчика вы также можете посмотреть, что отправлено с вашего компьютера на сайт/сервер. Это позволяет вам воссоздать все и имитировать вход и действия javascript, используя post/get с HttpWebRequest.

+0

Все это предполагает, что Best Buy не имеет API. «Лучшим» подходом было бы проверить и посмотреть, будут ли они делать. Даже если они не публично упоминают об этом на своем сайте, Emphatic может связаться с ними, чтобы узнать, есть ли у них что-то доступное. Быстрый взгляд [показывает обещание] (https://developer.bestbuy.com/). – mason

Смежные вопросы