una pagina obtener net manipular leer extraer escribir desde datos con codigo acceder c# web-scraping dotnet-httpclient

net - obtener html de una pagina c#



Obtenga el código HTML de un sitio web después de que se complete la carga (5)

Estoy intentando obtener el código HTML de un sitio web específico asíncrono con el siguiente código:

var response = await httpClient.GetStringAsync("url");

Pero el problema es que el sitio web suele tardar un segundo en cargar las otras partes del mismo. Lo que necesito, entonces la pregunta es si puedo cargar el sitio primero y leer el contenido después de un cierto tiempo.

Lo siento si esta pregunta ya fue respondida, pero realmente no sabía qué buscar.

Gracias veinte

Editar # 1

Si quieres probarlo tú mismo, la URL es http://iloveradio.de/iloveradio/ , necesito el Título y el Artista que no se cargan inmediatamente.



He revisado el sitio web, los datos están cargados por javascript. Solo puede obtener el html usando httpClient.GetStringAsync("url"); . Que yo sepa, no hay suerte de obtener los elementos que manipula el navegador.


Lo que hay que entender aquí es que cuando lea la respuesta de la URL, todo lo que obtendrá será la respuesta en bruto, en este caso, el código fuente HTML con el que respondió el servidor.

A diferencia de lo que puede ver en las herramientas de desarrollo de DOM Inspector de su navegador, solo obtendrá la fuente HTML original de la página (lo que podría ver en la herramienta de desarrollador "Origen de página") que no incluirá ningún contenido creado de forma dinámica (JavaScript) o Contenido cargado (como iframes).

Así que no estás obteniendo lo que ves aquí en el Inspector DOM:

Obtiene lo que ve aquí en el Código de página (Ver> Desarrollador> Ver código fuente en Chrome):

No puede esperar a que ese otro contenido se cargue porque nunca se cargará, ya que el contenido HTML no se está analizando o procesando como lo haría un navegador.

Tienes varias opciones disponibles aunque:

  • Mira si el sitio web tiene una API que puedas usar
  • Determine de dónde se carga realmente el contenido que desea, y realice otra solicitud HTTP diferente a ese contenido (el Panel de red es útil aquí)
  • Use un navegador sin cabeza para cargar la página mediante programación y leer dinámicamente el contenido de la página (esto agregará una gran cantidad de sobrecarga, y probablemente debería evitarse si es posible)

Podrías usar Puppeteer-Sharp :

await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false })) using (var page = await browser.NewPageAsync()) { await page.SetViewportAsync(new ViewPortOptions() { Width = 1280, Height = 600 }); await page.GoToAsync("http://iloveradio.de/iloveradio/"); await page.WaitForSelectorAsync("#artisttitle DIV"); var artist = await page.EvaluateExpressionAsync<string>("$(''#artisttitle DIV'')[0].innerText"); Console.WriteLine(artist); Console.ReadLine(); }


Si hay cosas que se cargan después, significa que son generadas por el código javascript después de la carga de la página (por ejemplo, una solicitud ajax), así que no importa cuánto tiempo espere, no tendrá el contenido que desea (porque no son en el código fuente cuando se carga).

Una forma fácil de hacerlo:

Use un WebBrowser y cuando los activadores de eventos DocumentCompleated esperen hasta que aparezca el elemento que desea.

La manera correcta:

encuentre el javascript usted mismo y actívelo usted mismo (fácil de decir, difícil de hacer).