2009-07-23 20 views
5

エントリを入力してフォームを検索し、結果から一致を抽出する作業を「自動化」することが可能かどうかは疑問でした。たとえば、DOI(デジタルオブジェクト識別子)を取得したいジャーナル記事のリストがあります。私は雑誌記事の検索ページ(例:http://pubs.acs.org/search/advanced)に行き、authors/title/volume(など)を入力し、返された結果のリストから記事を見つけ、DOIを取り出して貼り付けますそれを私の参照リストに入れてください。私は定期的にデータ解析にRとPythonを使用していますが(私はRCurlのポストに触発されました)、Webプロトコルについてはあまり知られていません...(PythonのBeautifulSoupのようなものを使用して)可能なことはありますか?このタスクと同様に遠隔操作を行うための参考資料はありますか?私は、この特定のタスクを完了するのと同じくらい一般的にウェブスクレイピングのためのウェブスクレイピングとツールについて学ぶことに多大な興味を持っています...あなたの時間をありがとう!検索フォームに記入して検索するウェブスクレイピング?

+0

この問題を解決するにはどうすればよいですか?私はこれと同様の(重複?)質問をした後これを見つけたhttp://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –

+0

@デビッド - いいえ、申し訳ありません。コメントするためのオプションがあれば、十分には得られていません... – hatmatrix

答えて

9

美しいスープは、それはあなたが何をしたいの半分だwebpages-解析するための素晴らしいです。 PythonやPerlの、そしてRubyのすべてがMechanizeのバージョンを持って、それはもう半分です:

http://wwwsearch.sourceforge.net/mechanize/

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() 

をあなたは持っています素晴らしいスタート。このクイックルビーこするガイドで使用されるように、私は検討したい1つの余分なツールは、Firebugのです:

http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/

Firebugのはあなたにいくつかの深刻な時間を節約し、文書を解析するためのXPathのあなたの建設を加速することができます。

幸運を祈る!

+0

素晴らしい!ありがとう - 非常に便利です! – hatmatrix

+0

スティーブン!私に答えをマークしてください!私は100点に同僚をレースしています:-) – mixonic

+0

私は努力しています!私はちょうどOpenIDを持っていますが、それは投票するために15の評判を持たなければならないことを私に伝えます??申し訳ありませんが、初めてstackoverflow ...これは複雑ですか? – hatmatrix

1
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 

(ジョーAlbahriの「一言で言えばC#の」から適応)

+0

ありがとうございます - それが可能であることを知っておいてよろしく! ...私は推測しています。 (あまりにも.NETに精通していない、私はそれがすべての怒りであると聞くが...) – hatmatrix

0

ウェブスクレイピングには多くのツールがあります。 iMacrosと呼ばれる良いFirefoxのプラグインがあります。それは素晴らしい作品で、プログラミングに関する知識は一切必要ありません。無料のバージョンはこちらからダウンロードできます: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ iMacrosについての最も良い点は、数分で起動でき、bashコマンドラインから起動でき、bashスクリプトからも呼び出すことができることです。

さらに進んだステップは、セレンのwebdriveです。セレンを選んだ理由は、初心者に適した方法で文書化されているからです。ちょうど次のものを読むpage:

あなたはすぐに稼動します。 Seleniumはjava、python、php、cをサポートしています。これらの言語に精通していれば、必要なすべてのコマンドに精通しているはずです。私はセレンのwebdriveバリエーションを好みます。ブラウザーを開くと、フィールドと出力を確認できます。 webdriveを使用してスクリプトを設定したら、スクリプトをIDEに簡単に移行でき、ヘッドレスで実行できます。これはあなたのために必要な依存関係と、すべての世話をするコマンドに

sudo easy_install selenium 

を入力して、あなたが行うことができますセレンをインストールするには

だけで、端末を開き、あなたは、Pythonのプロンプトを参照してください>>>あなたがコマンドを入力することができます

python 

を入力し、対話的にスクリプトを実行するために。ここで

あなたは、端末に貼り付けることができ、サンプルコードで、それは私はこれがあなたの頭のスタートを与えることができることを願っていますワードチーズ

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(); 
    }} 

をGoogleで検索します。

乾杯:

+0

まず、Selenium Client for Pythonをインストールするようにユーザーに指示します。あなたのコード例はJavaコードです。これは混乱しています。 – knb

関連する問題