Mi chiedevo se è possibile "automatizzare" il compito di digitare le voci nei moduli di ricerca e di estrarre le corrispondenze dai risultati. Ad esempio, ho un elenco di articoli di giornale per i quali vorrei ottenere i DOI (identificatore di oggetti digitali); manualmente per questo vorrei andare alla pagina di ricerca degli articoli della rivista (ad esempio, http://pubs.acs.org/search/advanced), digitare gli autori/titolo/volume (ecc.) e quindi trovare l'articolo fuori dall'elenco dei risultati restituiti e scegliere il DOI e incollare quello nella mia lista di riferimento. Io uso R e Python per l'analisi dei dati regolarmente (sono stato ispirato da un post su RCurl) ma non conosco molto sui protocolli web ... è una cosa possibile (ad esempio usando qualcosa come Python's BeautifulSoup?). Ci sono dei buoni riferimenti per fare qualcosa di simile a questo compito remotamente? Sono altrettanto interessato a conoscere il web scraping e gli strumenti per il web scraping in generale tanto quanto ottenere questo particolare compito fatto ... Grazie per il vostro tempo!web scraping per compilare (e recuperare) i moduli di ricerca?
risposta
Beautiful Soup è grande per l'analisi webpages- che è la metà di quello che si vuole fare. Python, Perl e Ruby hanno tutti una versione di Mechanize, e questa è l'altra metà:
http://wwwsearch.sourceforge.net/mechanize/
meccanizzare ti permette di controllare un browser:
# 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 e Beautiful Soup si dispone di un ottimo inizio Uno strumento in più mi piacerebbe prendere in considerazione è Firebug, come usato in questo breve resoconto rubino raschiatura:
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug può accelerare la costruzione di XPaths per l'analisi di documenti, consentendo di risparmiare tempo serio.
Buona fortuna!
Grande !! Grazie - molto utile! – hatmatrix
Stephen! Segna una risposta! Sto correndo un collega in 100 punti :-) – mixonic
Ci sto provando! Ho appena ricevuto un OpenID ma mi dice che devo avere 15 reputazione per votare? Scusa, la prima volta su StackOverflow ... è complicato? – 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
(Adattato da Joe Albahri "C# in poche parole")
Grazie - bello sapere che è possibile! ... Sto indovinando. (non troppo familiare con .NET, anche se sento che è di gran moda ...) – hatmatrix
Ci sono molti strumenti per il web scraping. C'è un buon plugin per Firefox chiamato iMacros. Funziona alla grande e non ha bisogno di alcuna conoscenza di programmazione. La versione gratuita può essere scaricata da qui: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ La cosa migliore di iMacros è che può iniziare in pochi minuti e può anche essere lanciato dalla riga di comando di bash e può anche essere richiamato da script di bash.
Un passo più avanzato sarebbe il web-drive di selenio. Il motivo per cui ho scelto il selenio è che è documentato in modo perfetto per i principianti. leggendo solo il seguente page:
ti farebbe funzionare e in poco tempo. Il selenio supporta java, python, php, c quindi se conosci qualcuno di questi linguaggi, avrai familiarità con tutti i comandi necessari. Preferisco la variazione del selenio sul webdrive, in quanto apre un browser, in modo da poter controllare i campi e le uscite. Dopo aver impostato lo script tramite webdrive, è possibile migrare facilmente lo script in IDE, eseguendo quindi headless.
Per installare il selenio si può fare digitando il comando
sudo easy_install selenium
Questo si prenderà cura delle dipendenze e tutto il necessario per voi.
Al fine di eseguire lo script in modo interattivo, basta aprire un terminale e digitare
python
vedrete il prompt di pitone, >>> ed è possibile digitare i comandi.
Ecco un codice di esempio che è possibile incollare nel terminale, cercherà di Google per la parola formaggi
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();
}}
Spero che questo può dare un vantaggio iniziale.
Cheers :)
Prima di dire all'utente di installare Selenium Client per Python; ma il tuo esempio di codice è il codice Java. Questo è confusionario. – knb
- 1. Heroku e Web scraping
- 2. Web scraping con Python
- 3. Web scraping con jquery e ajax
- 4. Proxy rotanti per scraping web
- 5. Suggerimenti per scraping, scraping schermo e data mining?
- 6. Utilizzo di arricciatura per inviare/recuperare i risultati di moduli
- 7. Web scraping con Java
- 8. Scraping pagine web abilitate ajax
- 9. Web scraping con Schema
- 10. Essendo un buon cittadino e web-scraping
- 11. web scraping google news con python
- 12. Selenio contro BeautifulSoup per scraping web
- 13. Opzioni per scraping web - solo versione C++
- 14. Algoritmo NLP per compilare i termini di ricerca
- 15. Compilare i dati del modulo Web usando i moduli Python integrati
- 16. Content Provider per recuperare i risultati dal server Web?
- 17. dattiloscritto per moduli Web
- 18. Web scraping SEC Edgar 10-K e 10-Q limature
- 19. Come scrivere codice su web crawling e scraping in R
- 20. Problemi di scraping del web Python
- 21. Ricerca di SDK OCR per moduli e documenti
- 22. Moduli GWT e pagine Web
- 23. Gemme/strumenti per scraping di pagine Web disponibili in Ruby
- 24. Pacchetto "rvest" per sito web di scraping https con proxy
- 25. Libreria di scraping per PHP - phpQuery?
- 26. I migliori esempi di progettazione di moduli Web CRUD
- 27. Utilizzo di jQuery e JSON per popolare i moduli?
- 28. Selenium Webdriver/Beautifulsoup + Web Scraping + Errore 416
- 29. Scraping un sito Web per ottenere il nome dell'elemento e l'id tramite il browser Web C#
- 30. test unitari per screen-scraping?
hai trovato una buona soluzione a questo problema? Ho trovato questo dopo aver chiesto una domanda simile (duplicata?) Qui http://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –
@ David - no, mi dispiace. Non sono arrivato abbastanza lontano con qualsiasi opzione per commentare ... – hatmatrix