Me preguntaba si es posible "automatizar" la tarea de escribir entradas para buscar formularios y extraer coincidencias de los resultados. Por ejemplo, tengo una lista de artículos de revistas para los cuales me gustaría obtener DOI (identificador de objeto digital); De forma manual, iría a la página de búsqueda de artículos de revistas (por ejemplo, http://pubs.acs.org/search/advanced), escribiría los autores/título/volumen (etc.) y luego encontraría el artículo fuera de su lista de resultados devueltos, y seleccionaría el DOI y lo pegaría eso en mi lista de referencia. Uso R y Python para el análisis de datos regularmente (me inspiré en una publicación en RCurl) pero no sé mucho sobre protocolos web ... ¿es posible? (Por ejemplo, usar algo como BeautifulSoup de Python). ¿Hay alguna buena referencia para hacer algo remotamente similar a esta tarea? Estoy tan interesado en aprender sobre raspado web y herramientas para raspar en la web en general como hacer esta tarea en particular ... ¡Gracias por su tiempo!web scraping para completar (y recuperar) formularios de búsqueda?
Respuesta
Hermosa sopa es ideal para analizar webpages- eso es la mitad de lo que quiere hacer. Python, Perl y Ruby todos tienen una versión de Mechanize, y esa es la otra mitad:
http://wwwsearch.sourceforge.net/mechanize/
Mecanización te permite controlar un navegador:
# Follow a link
browser.follow_link(link_node)
# Submit a form
browser.select_form(name="search")
browser["authors"] = ["author #1", "author #2"]
browser["volume"] = "any"
search_response = br.submit()
Con Mechanize y sopa Hermosa tiene una gran comienzo. Una herramienta adicional que consideraría es Firebug, tal como se utiliza en esta guía rubí raspado rápida:
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug puede acelerar su construcción de XPaths para analizar los documentos, que le ahorra un tiempo serio.
¡Buena suerte!
¡¡Genial !! Gracias, ¡muy útil! – hatmatrix
Stephen! ¡Dame una respuesta! Estoy compitiendo con un compañero de trabajo a 100 puntos :-) – mixonic
¡Lo estoy intentando! Acabo de obtener un OpenID pero me dice que tengo que tener 15 reputación para votar? Lo siento, primera vez en stackoverflow ... ¿es tan complicado? – hatmatrix
WebRequest req = WebRequest.Create("http://www.URLacceptingPOSTparams.com");
req.Proxy = null;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
//
// add POST data
string reqString = "searchtextbox=webclient&searchmode=simple&OtherParam=???";
byte[] reqData = Encoding.UTF8.GetBytes (reqString);
req.ContentLength = reqData.Length;
//
// send request
using (Stream reqStream = req.GetRequestStream())
reqStream.Write (reqData, 0, reqData.Length);
string response;
//
// retrieve response
using (WebResponse res = req.GetResponse())
using (Stream resSteam = res.GetResponseStream())
using (StreamReader sr = new StreamReader (resSteam))
response = sr.ReadToEnd();
// use a regular expression to break apart response
// OR you could load the HTML response page as a DOM
(Adaptado de Joe Albahri "C# en una cáscara de nuez")
Gracias, ¡es bueno saber que es posible! ...Estoy adivinando. (No estoy muy familiarizado con .NET, aunque escuché que es furor ...) – hatmatrix
Hay muchas herramientas para raspar web. Hay un buen complemento de Firefox llamado iMacros. Funciona muy bien y no necesita ningún conocimiento de programación. La versión gratuita se puede descargar desde aquí: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ Lo mejor de iMacros es que puede comenzar en minutos, y también se puede iniciar desde la línea de comando bash, y también se puede invocar desde las secuencias de comandos bash.
Un paso más avanzado sería selenium webdrive. La razón por la que elegí el selenio es que está documentado de una manera excelente para principiantes. leyendo solo lo siguiente page:
lo pondría en marcha rápidamente. Selenium admite java, python, php, c, por lo que si está familiarizado con cualquiera de estos idiomas, estará familiarizado con todos los comandos necesarios. Prefiero la variación del selenio en la WebDrive, ya que abre un navegador, para que pueda verificar los campos y las salidas. Después de configurar la secuencia de comandos usando webdrive, puede migrar fácilmente la secuencia de comandos a IDE, y así ejecutar sin cabeza.
Para instalar el selenio se puede hacer escribiendo el comando
sudo easy_install selenium
Esto se hará cargo de las dependencias y todo lo necesario para usted.
Con el fin de ejecutar el script de forma interactiva, basta con abrir un terminal y escriba
python
verá el símbolo del pitón, >>> y se puede escribir en los comandos.
Aquí es un ejemplo de código que puede pegar en la terminal, buscará en Google de la palabra quesos
package org.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Example {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
driver.quit();
}}
espero que esto le puede dar una ventaja inicial.
Saludos :)
Primero le está diciendo al usuario que instale Selenium Client para Python; pero su ejemplo de código es código Java. Esto es confuso. – knb
- 1. Proxies rotativos para scraping web
- 2. Web scraping en PHP
- 3. ¿Cuál es la diferencia entre web-crawling y web-scraping?
- 4. Web Scraping con Haskell
- 5. Etiqueta web scraping
- 6. Web scraping con Python
- 7. Web scraping con Python
- 8. Python 3 web scraping options
- 9. RUBY - web scraping - (OpenURI :: HTTPError)
- 10. Scraping Library para PHP - phpQuery?
- 11. Scraping para una "vista previa" de una página web - Python
- 12. Recuperar información después de completar una reserva (cURL, iFrame ...?) En un sitio web externo
- 13. Web Scraping con Google App Engine
- 14. Power Shell Web Scraping SSL/TSL Issue
- 15. Algoritmo NLP para 'completar' los términos de búsqueda
- 16. Web scraping - cómo identificar contenido principal en una página web
- 17. Uso de curl para enviar/recuperar resultados de formularios
- 18. html scraping y css consultas
- 19. Ninject con formularios web ASP.Net y MVC
- 20. formularios web dinámicos
- 21. Web scraping de Python que implica etiquetas HTML con atributos
- 22. Python urllib2 llenado y recuperación de formularios automáticos
- 23. heavy iTunes Connect scraping
- 24. Screen Scraping desde una página web con mucho Javascript
- 25. Python no puede recuperar formularios con urllib o mecanizar
- 26. Enrutamiento ASP.NET con formularios web
- 27. ¿Cómo puedo recuperar mi historial de búsqueda de Google?
- 28. Url.Content en ASP.NET formularios web
- 29. Cualquier sugerencia para terceros Generador/generador de formularios web .NET
- 30. usando readline() para completar
¿Has encontrado una buena solución a este problema? Lo encontré después de hacer una pregunta similar (¿duplicada?) Aquí http://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –
@ David - no, lo siento. No he llegado lo suficientemente lejos con ninguna opción para comentar ... – hatmatrix