Je me demandais s'il est possible de "automatiser" la tâche de taper des entrées pour rechercher des formulaires et d'extraire des correspondances des résultats. Par exemple, j'ai une liste d'articles de journaux pour lesquels je voudrais obtenir DOI (identifiant d'objet numérique); Manuellement pour cela, j'irais à la page de recherche d'articles de journaux (par exemple, http://pubs.acs.org/ Recherche / Advanced ), Tapez les auteurs / Titre / Volume (etc.), puis trouvez l'article hors de sa liste des résultats renvoyés et choisissez la DOI et collez-la dans ma liste de référence. J'utilise régulièrement R et Python pour l'analyse de données (j'ai été inspiré par un poste sur RCURL), mais je ne sais pas grand chose sur les protocoles Web ... est une chose tellement possible (par exemple en utilisant quelque chose comme la magniforée de Python?). Y a-t-il de bonnes références pour faire quoi que ce soit à distance semblable à cette tâche? Je suis tout autant intéressé par l'apprentissage de la raclée Web et des outils de raclage en général en général, tout comme obtenir cette tâche particulière ... Merci pour votre temps! P>
4 Réponses :
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 (Adapted from Joe Albahri's "C# in a nutshell")
Merci - bon de savoir que c'est possible! ...Je devine. (Pas trop familier avec .net, même si j'entends que c'est toute la rage ...)
Une belle soupe est idéale pour analyser les pages Web - c'est la moitié de ce que vous voulez faire. Python, Perl et Ruby ont tous une version de mécanismes, et c'est l'autre moitié:
http: // wwwsearch.sourceforge.net/mechanize/ p>
mécanise Contrôlez-vous un navigateur: p> avec mécanismes et belle soupe que vous avez une superbe début. Un outil supplémentaire que je considérerais est Firebug, tel qu'il est utilisé dans ce guide de raclage rubis rapide: p> http://www.igvita.com/2007/02/04/Ruby-Sreen-scraper-in-60-seconds/ P> Firebug peut accélérer votre construction de XPaths pour analyser des documents, vous économiser un temps sérieux. P> Bonne chance! P> P>
Super!! Merci - très utile!
Stephen! Marquez-moi une réponse! Je raconte un collègue à 100 points :-)
J'essaie! Je viens de recevoir un OpenID mais ça me dit que je dois avoir 15 la réputation de voter ?? Désolé, première fois sur Stackoverflow ... Est-ce cela compliqué?
Heh, merci Stephen. Vous pouvez toujours choisir une réponse, mais vous avez besoin de 10 points pour voter les choses.
Ah ... Désolé, je ne pouvais pas faire plus, mais votre réponse était super utile!
Qu'en est-il de la sien? En 2018, je pense que c'est la solution la plus populaire
Il existe de nombreux outils pour gratter Web. Il y a un bon plug-in Firefox appelé Imacros. Cela fonctionne bien et ne nécessite aucune connaissance de programmation. La version gratuite peut être téléchargée à partir d'ici: https://addons.mozilla.org/en-us/ Firefox / Addon / Imacros-for-Firefox / La meilleure chose à propos de Imaccros, c'est que cela peut vous aider à démarrer en quelques minutes et peut également être lancé à partir de la ligne de commande Bash et peut également être appelée à partir de scripts Bash.
Une étape plus avancée serait Selenium Webdrive. La raison pour laquelle j'ai choisi le sélénium est qu'elle est documentée de manière formidable pour les débutants. lire simplement les page: P>
vous permettrait d'exécuter pas le temps. Selenium prend en charge Java, Python, PHP, C Donc, si vous connaissez l'une de ces langues, vous seriez familiariser avec toutes les commandes nécessaires. Je préfère la variation WebDrive du sélénium, car elle ouvre un navigateur, de sorte que vous puissiez vérifier les champs et les sorties. Après avoir configuré le script à l'aide de WebDrive, vous pouvez facilement migrer le script en IDE, fonctionnant ainsi sans tête. P>
Pour installer sélénium que vous pouvez effectuer en tapant la commande p> Cela s'occupera des dépendances et de tout besoin pour vous. p> Pour exécuter votre script de manière interactive, ouvrez simplement un terminal et tapez P> 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();
}}
Vous indiquez d'abord à l'utilisateur d'installer le client SELENIUM pour Python; Mais votre exemple de code est le code Java. Ceci est déroutant.
Code Python: Pour les formulaires de recherche.
# import from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0 # Create a new instance of the Firefox driver driver = webdriver.Firefox() # go to the google home page driver.get("http://www.google.com") # the page is ajaxy so the title is originally this: print driver.title # find the element that's name attribute is q (the google search box) inputElement = driver.find_element_by_name("q") # type in the search inputElement.send_keys("cheese!") # submit the form (although google automatically searches now without submitting) inputElement.submit() try: # we have to wait for the page to refresh, the last thing that seems to be updated is the title WebDriverWait(driver, 10).until(EC.title_contains("cheese!")) # You should see "cheese! - Google Search" print driver.title finally: driver.quit()
Avez-vous proposé une bonne solution à ce problème? J'ai trouvé cela après avoir posé une question similaire (duplicate?) Ici Stackoverflow.com/Questtions/9711539/...
@David - Nope, désolé. N'a pas assez devenu avec aucune option pour commenter ...