エントリを入力してフォームを検索し、結果から一致を抽出する作業を「自動化」することが可能かどうかは疑問でした。たとえば、DOI(デジタルオブジェクト識別子)を取得したいジャーナル記事のリストがあります。私は雑誌記事の検索ページ(例:http://pubs.acs.org/search/advanced)に行き、authors/title/volume(など)を入力し、返された結果のリストから記事を見つけ、DOIを取り出して貼り付けますそれを私の参照リストに入れてください。私は定期的にデータ解析にRとPythonを使用していますが(私はRCurlのポストに触発されました)、Webプロトコルについてはあまり知られていません...(PythonのBeautifulSoupのようなものを使用して)可能なことはありますか?このタスクと同様に遠隔操作を行うための参考資料はありますか?私は、この特定のタスクを完了するのと同じくらい一般的にウェブスクレイピングのためのウェブスクレイピングとツールについて学ぶことに多大な興味を持っています...あなたの時間をありがとう!検索フォームに記入して検索するウェブスクレイピング?
答えて
美しいスープは、それはあなたが何をしたいの半分だ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のあなたの建設を加速することができます。
幸運を祈る!
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#の」から適応)
ありがとうございます - それが可能であることを知っておいてよろしく! ...私は推測しています。 (あまりにも.NETに精通していない、私はそれがすべての怒りであると聞くが...) – hatmatrix
ウェブスクレイピングには多くのツールがあります。 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で検索します。
乾杯:
まず、Selenium Client for Pythonをインストールするようにユーザーに指示します。あなたのコード例はJavaコードです。これは混乱しています。 – knb
- 1. Javascriptのフォーム入力検索
- 2. symfony検索フォーム
- 3. 検索フォーム
- 4. 検索条件フォーム
- 5. Oracleフォーム検索フィルタ
- 6. CodeIgniterの検索フォーム
- 7. sencha touch検索フォーム
- 8. PHP:検索スクリプトにリンクする検索フォームを作成するには
- 9. 2つの検索テキストパラメータを使用してpostgres検索する方法、検索フィルタテキスト1 &&検索フィルタテキスト2
- 10. 入力フォームから検索ボタンを押してください。
- 11. ファセットジオポイント検索による弾性検索
- 12. VBA質問:既存の検索フォームに検索テキストフィールドを追加します。
- 13. 検索フォームのURL構造
- 14. asp.netの検索フォームMVC
- 15. 複数の検索フォーム
- 16. PHPフォーム検索MySQLデータベース
- 17. PHPでフォームを検索
- 18. マルチビュー検索フォーム(ASP.NET MVC 2)
- 19. フォーム検索の提出ヘルプ
- 20. ExtJS:ajaxベースの検索フォーム
- 21. WPFフォームの検索機能
- 22. JqGridのCustome検索フォーム
- 23. リダイレクト先の簡単な検索フォーム?s =検索語句
- 24. Coldfusionでの検索フォームのSql検索クエリ
- 25. 検索条件に基づいてオブジェクトを検索し返す
- 26. 検索フォームに値を入力する方法
- 27. ファイルを検索して整数を検索する方法
- 28. WebViewで単語と文字を検索して検索する
- 29. NSFetchedResultsControllerと検索ディスプレイコントローラを使用してCoreDataを検索する
- 30. 複数の検索結果を検索して印刷する
この問題を解決するにはどうすればよいですか?私はこれと同様の(重複?)質問をした後これを見つけたhttp://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –
@デビッド - いいえ、申し訳ありません。コメントするためのオプションがあれば、十分には得られていません... – hatmatrix