エントリを入力してフォームを検索し、結果から一致を抽出するタスクを「自動化」できるかどうか疑問に思っていました。たとえば、DOI (デジタル オブジェクト識別子) を取得したいジャーナル記事のリストがあります。これを手動で行うには、ジャーナル記事の検索ページに移動します (例: http://pubs.acs.org/search/advanced)、著者/タイトル/ボリューム(など)を入力し、返された結果のリストから記事を見つけ、DOIを選択して参照リストに貼り付けます. 私はデータ分析に R と Python を定期的に使用しています (RCurl の投稿に触発されました) が、Web プロトコルについてはあまり知りません... そのようなことは可能ですか (たとえば、Python の BeautifulSoup のようなものを使用しますか?)。このタスクと同様のことをリモートで実行するための適切な参照はありますか? この特定のタスクを完了するのと同じくらい、WebスクレイピングとWebスクレイピングのツール全般について学ぶことに興味があります...お時間をいただきありがとうございます!
4 に答える
Beautiful Soup は、Web ページの解析に最適です。これは、やりたいことの半分です。Python、Perl、および Ruby にはすべて Mechanize のバージョンがあり、それが残りの半分です。
http://wwwsearch.sourceforge.net/mechanize/
Mechanize を使用すると、ブラウザを制御できます。
# 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()
Mechanize と Beautiful Soup を使用すると、すばらしいスタートを切ることができます。私が検討したいもう 1 つのツールは、このクイック Ruby スクレイピング ガイドで使用されているように、Firebug です。
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug を使用すると、ドキュメントを解析するための xpath の構築を高速化できるため、かなりの時間を節約できます。
幸運を!
Webスクレイピング用のツールはたくさんあります。iMacros と呼ばれる優れた Firefox プラグインがあります。それはうまく機能し、プログラミングの知識はまったく必要ありません。無料版はこちらからダウンロードできます: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ iMacros の最も優れた点は、数分で開始できることです。また、bash コマンド ラインから起動することも、bash スクリプト内から呼び出すこともできます。
より高度な手順は、selenium webdrive です。私がセレンを選んだ理由は、それが初心者に適した素晴らしい方法で文書化されているからです. 次のページだけを読んでください:
すぐに使い始めることができます。Selenium は java、python、php、c をサポートしているため、これらの言語のいずれかに精通していれば、必要なすべてのコマンドに精通しているはずです。フィールドと出力を確認できるように、ブラウザーを開くので、セレンの webdrive バリエーションを好みます。webdrive を使用してスクリプトをセットアップした後、スクリプトを IDE に簡単に移行できるため、ヘッドレスで実行できます。
セレンをインストールするには、次のコマンドを入力して実行できます
sudo easy_install selenium
これにより、依存関係と必要なすべてが処理されます。
スクリプトをインタラクティブに実行するには、ターミナルを開いて次のように入力します。
python
Python プロンプト >>> が表示され、コマンドを入力できます。
ターミナルに貼り付けることができるサンプル コードを次に示します。Google で「チーズ」という単語を検索します。
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();
}}
これがあなたに有利なスタートを切ることができることを願っています。
乾杯 :)