2010-10-07 2 views
2

Могу ли я получить очень легко следовать примерам кода на следующее:C#: гусеничный проект

  1. Использование управления браузером для запуска запроса на целевой сайт.
  2. Захват ответа с целевого сайта.
  3. преобразовать ответ в объект DOM.
  4. Итерации через объект DOM и захват таких вещей, как «FirstName» «LastName» и т. Д., Если они являются частью ответа.

благодарит

+3

Почему бы использовать контроль браузера, а не только с помощью объекта WebClient (или системы. Net.WebRequest)? –

+1

Не используйте для этого элемент управления WebBrowser. – SLaks

+0

Тим, SLaks, что вы рекомендуете, кроме управления WebBrowser. Я хочу, чтобы мой запрос выглядел человеком на целевом сайте. –

ответ

2

Вот код, который использует объект WebRequest для извлечения данных и фиксирует реакцию в виде потока.

public static Stream GetExternalData(string url, string postData, int timeout) 
    { 
     ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, 
                       X509Certificate certificate, 
                       X509Chain chain, 
                       SslPolicyErrors sslPolicyErrors) 
     { 
      // if we trust the callee implicitly, return true...otherwise, perform validation logic 
      return [bool]; 
     }; 

     WebRequest request = null; 
     HttpWebResponse response = null; 

     try 
     { 
      request = WebRequest.Create(url); 
      request.Timeout = timeout; // force a quick timeout 

      if(postData != null) 
      { 
       request.Method = "POST"; 
       request.ContentType = "application/x-www-form-urlencoded"; 
       request.ContentLength = postData.Length; 

       using(StreamWriter requestStream = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII)) 
       { 
        requestStream.Write(postData); 
        requestStream.Close(); 
       } 
      } 

      response = (HttpWebResponse)request.GetResponse(); 
     } 
     catch(WebException ex) 
     { 
      Log.LogException(ex); 
     } 
     finally 
     { 
      request = null; 
     } 

     if(response == null || response.StatusCode != HttpStatusCode.OK) 
     { 
      if(response != null) 
      { 
       response.Close(); 
       response = null; 
      } 

      return null; 
     } 

     return response.GetResponseStream(); 
    } 

Для управления ответ, у меня есть пользовательский Xhtml анализатор, который я использую, но это тысячи строк кода. Существует несколько общедоступных парсеров (см. Комментарий Дарина).

EDIT: по запросу OP заголовки могут быть добавлены в запрос для эмуляции пользовательского агента. Например:

request = (HttpWebRequest)WebRequest.Create(url); 
       request.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*"; 
       request.Timeout = timeout; 
       request.Headers.Add("Cookie", cookies); 

       // 
       // manifest as a standard user agent 
       request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)"; 
1

Вы можете посмотреть на Html Agility Pack и/или SgmlReader. Ниже приведен пример с использованием SgmlReader, который выбирает все узлы в DOM, содержащие текст:

class Program 
{ 
    static void Main() 
    { 
     using (var reader = new SgmlReader()) 
     { 
      reader.Href = "http://www.microsoft.com"; 
      var doc = new XmlDocument(); 
      doc.Load(reader); 
      var nodes = doc.SelectNodes("//*[contains(text(), 'Products')]"); 
      foreach (XmlNode node in nodes) 
      { 
       Console.WriteLine(node.OuterXml); 
      } 
     } 
    } 
} 
0

Вы также можете использовать селен, чтобы легко пересечь DOM и захватить значения полей. Он также автоматически откроет браузер для вас.

1

Here вы можете найти учебное пособие из 4 частей к тому, что вы хотите.

это первый один, 4 части here (Как написать Search Engine)

1

Если вы хотите чистый C# способ обхода веб-страниц, хорошее место, чтобы посмотреть это WatiN. Это позволяет вам легко открывать веб-браузер и проходить через веб-страницу (и действия) с помощью кода C#.

Вот пример для поиска Google с API (взято из их документов)

using System; 
using WatiN.Core; 

namespaceWatiNGettingStarted 
{ 
    class WatiNConsoleExample 
    { 
    [STAThread] 
    static void Main(string[] args) 
    { 
     // Open a new Internet Explorer window and 
     // goto the google website. 
     IE ie = new IE("http://www.google.com"); 

     // Find the search text field and type Watin in it. 
     ie.TextField(Find.ByName("q")).TypeText("WatiN"); 

     // Click the Google search button. 
     ie.Button(Find.ByValue("Google Search")).Click(); 

     // Uncomment the following line if you want to close 
     // Internet Explorer and the console window immediately. 
     //ie.Close(); 
    } 
    } 

}

+0

Спасибо за образец кода –

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