tutorial scrapysharp scraping scrap page leer iron hacer contenido con como codigo c# javascript html visual-studio web-scraping

c# - scraping - scrapysharp



Scraping página web generada por javascript con C# (2)

El problema es que el navegador generalmente ejecuta el javascript y resulta con un DOM actualizado. A menos que pueda analizar el javascript o interceptar los datos que utiliza, deberá ejecutar el código como lo haría un navegador. En el pasado me encontré con el mismo problema, utilicé selenio y PhantomJS para renderizar la página. Después de renderizar la página, utilizaría el cliente WebDriver para navegar por el DOM y recuperar el contenido que necesitaba, publicar AJAX.

En un nivel alto, estos son los pasos:

  1. Selenio instalado: http://docs.seleniumhq.org/
  2. Comenzó el centro de selenio como un servicio
  3. Phantomjs descargados (un navegador sin cabeza, que puede ejecutar el javascript): http://phantomjs.org/
  4. Comenzó phantomjs en modo webdriver apuntando al concentrador de selenio
  5. En mi aplicación de raspado instalé el paquete nuget del cliente de webdriver: Install-Package Selenium.WebDriver

Aquí hay un ejemplo de uso del controlador de página phantomjs:

var options = new PhantomJSOptions(); options.AddAdditionalCapability("IsJavaScriptEnabled",true); var driver = new RemoteWebDriver( new URI(Configuration.SeleniumServerHub), options.ToCapabilities(), TimeSpan.FromSeconds(3) ); driver.Url = "http://www.regulations.gov/#!documentDetail;D=APHIS-2013-0013-0083"; driver.Navigate(); //the driver can now provide you with what you need (it will execute the script) //get the source of the page var source = driver.PageSource; //fully navigate the dom var pathElement = driver.FindElementById("some-id");

Se puede encontrar más información sobre selenio, phantomjs y webdriver en los siguientes enlaces:

http://docs.seleniumhq.org/

http://docs.seleniumhq.org/projects/webdriver/

http://phantomjs.org/

EDITAR: Método más fácil

Parece que hay un paquete nuget para los phantomjs, por lo que no necesitas el concentrador (utilicé un clúster para realizar un desguace masivo de esta manera):

Instalar el controlador web:

Install-Package Selenium.WebDriver

Instalar exe incrustado:

Install-Package phantomjs.exe

Código actualizado:

var driver = new PhantomJSDriver(); driver.Url = "http://www.regulations.gov/#!documentDetail;D=APHIS-2013-0013-0083"; driver.Navigate(); //the driver can now provide you with what you need (it will execute the script) //get the source of the page var source = driver.PageSource; //fully navigate the dom var pathElement = driver.FindElementById("some-id");

Tengo un webBrowser y una etiqueta en Visual Studio, y básicamente lo que intento hacer es tomar una sección de otra página web.

Intenté usar WebClient.DownloadString y WebClient.DownloadFile, y ambos me dieron el código fuente de la página web antes de que el javascript cargue el contenido. Mi siguiente idea fue utilizar una herramienta WebBrowser y simplemente llamar a webBrowser.DocumentText después de que la página cargó y eso no funcionó, todavía me da la fuente original de la página.

¿Hay alguna manera de capturar la página post-javascriptload?

Aquí está la página que estoy tratando de raspar.

http://www.regulations.gov/#!documentDetail;D=APHIS-2013-0013-0083

Necesito sacar el comentario de esa página, que se genera.


ok, te mostraré cómo habilitar javascript usando phantomjs y selenuim con c #

  1. crea un nuevo nombre de proyecto de consola como quieras
  2. vaya al explorador de soluciones en su mano derecha
  3. haga clic con el botón derecho en Referencias, haga clic en Administrar paquetes NuGet
  4. una ventana mostrará clic en navegar que instalar Selenium.WebDriver
  5. phantomjs bajados desde aquí Phantomjs
  6. en su función principal escriba este código

    var options = new PhantomJSOptions(); options.AddAdditionalCapability("IsJavaScriptEnabled", true); IWebDriver driver = new PhantomJSDriver("phantomjs Folder Path", options); driver.Navigate().GoToUrl("https://www.yourwebsite.com/"); try { string pagesource = driver.PageSource; driver.FindElement(By.Id("yourelement")); Console.Write("yourelement founded"); } catch (Exception e) { Console.WriteLine(e.Message); } Console.Read();

no se olvide de poner su sitio web y el elemento que está buscando y la ruta de acceso phantomjs.exe en su equipo en este código a continuación

tener un buen momento de codificación y gracias wbennett