Ich frage mich, ob es möglich ist, die Eingabe von Einträgen zu automatisieren, um Formulare zu suchen und Übereinstimmungen aus den Ergebnissen zu extrahieren. Zum Beispiel habe ich eine Liste von Zeitschriftenartikeln, für die ich DOIs (digitale Objektkennung) erhalten möchte; manuell dazu würde ich auf die Suchseite für Zeitschriftenartikel gehen (z. B.), die Autoren/Titel/Volumen (usw.) eingeben und dann den Artikel aus seiner Liste der zurückgegebenen Ergebnisse finden und den DOI auswählen und einfügen das in meine Referenzliste. Ich benutze R und Python für die Datenanalyse regelmäßig (ich wurde von einem Beitrag auf RCurl inspiriert), weiß aber nicht viel über Webprotokolle ... ist so etwas möglich (zum Beispiel mit etwas wie Pythons BeautifulSoup?). Gibt es irgendwelche guten Referenzen, um etwas Ähnliches wie diese Aufgabe zu machen? Ich bin genauso interessiert daran, etwas über Web-Scraping und Tools für das Scraping im Web zu lernen, genauso wie für diese spezielle Aufgabe ... Danke für deine Zeit!Web Scraping zum Ausfüllen (und Abrufen) von Suchformularen?
Antwort
Schöne Suppe ist für webpages-, dass das Parsen ist die Hälfte von dem, was Sie tun möchten. Python, Perl und Ruby haben alle eine Version von Mechanize, und das ist die andere Hälfte:
http://wwwsearch.sourceforge.net/mechanize/
Mechanize wir Sie einen Browser steuern:
# 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()
Mit Mechanize und schöne Suppe Sie haben toller Anfang. Ein zusätzliches Werkzeug, das ich betrachten würde, ist Firebug, wie in dieser schnellen Rubin Schaben Anleitung:
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug Ihre Konstruktion von XPath für das Parsen von Dokumenten beschleunigen können, sparen Ihnen einige ernsthafte Zeit.
Viel Glück!
Großartig !! Danke - sehr hilfreich! – hatmatrix
Stephen! Mark mir eine Antwort! Ich fahre einen Kollegen zu 100 Punkten :-) – mixonic
Ich versuche es! Ich habe gerade eine OpenID, aber es sagt mir, ich muss 15 Ruf haben, um zu wählen? Sorry, das erste mal auf Stackoverflow ... ist das so kompliziert? – 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
(Angepasst von Joe Albahri des „C# auf den Punkt gebracht“)
Danke - gut zu wissen, dass es möglich ist! ...Ich rate. (nicht zu vertraut mit. NET, obwohl ich höre es ist der letzte Schrei ...) – hatmatrix
Es gibt viele Werkzeuge zum Abschaben von Papier. Es gibt ein gutes Firefox-Plugin namens iMacros. Es funktioniert großartig und benötigt keinerlei Programmierkenntnisse. Die kostenlose Version kann von hier heruntergeladen werden: Das beste an iMacros ist, dass es Sie in wenigen Minuten starten kann, und es kann auch von der Bash-Befehlszeile gestartet werden, und kann auch aus Bash-Skripten aufgerufen werden.
Ein fortgeschrittener Schritt wäre Selen-Webdrive. Der Grund, warum ich Selen gewählt habe, ist, dass es sehr gut für Anfänger geeignet ist. Lesen Sie nur die folgenden page:
würde Sie in kürzester Zeit auf und läuft. Selen unterstützt Java, Python, PHP, c Wenn Sie also mit einer dieser Sprachen vertraut sind, sind Sie mit allen erforderlichen Befehlen vertraut. Ich bevorzuge Webdrive Variation von Selen, wie es einen Browser öffnet, so dass Sie die Felder und Ausgaben überprüfen können. Nachdem Sie das Skript mit dem Webdrive eingerichtet haben, können Sie das Skript problemlos in die IDE migrieren und so kopflos arbeiten.
Selen installieren Sie, indem Sie den Befehl
sudo easy_install selenium
Dieser kümmert sich um die Abhängigkeiten und alles für Sie tun können.
Um Ihr Skript interaktiv ausführen, nur öffnen Sie ein Terminal und geben Sie
python
Sie die Python-Prompt sehen >>>, und Sie können in den Befehlen eingeben.
Hier ist ein Beispielcode, den Sie im Terminal einfügen kann, ist es Google für das Wort Käse
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();
}}
Ich hoffe suchen, dass dieser Ihnen einen Vorsprung geben kann.
Prost :)
Zunächst weisen Sie den Benutzer an, den Selenium Client für Python zu installieren. aber Ihr Code-Beispiel ist Java-Code. Das ist verwirrend. – knb
Haben Sie eine gute Lösung für dieses Problem gefunden? Ich habe das gefunden, nachdem ich eine ähnliche (Duplikate?) Frage hier gestellt habe http://stackoverflow.com/questions/9711539/cani-iquery-the-digital-object-identifier-for-a-list-of-citations –
@ David - nein, tut mir Leid. Ich bin noch nicht weit genug gekommen, um etwas zu kommentieren ... – hatmatrix