2017-09-07 7 views
2

まず最初に私はSOコミュニティに感謝します。 アカウントを作成する必要がなくても、過去何度も私を助けてくれました。Rフォームによる擦り傷の修復

私の現在の問題には、Rを使ったウェブスクラップがあります。私の強みではありません。

私が試してみました何http://www.cbs.dtu.dk/services/SignalP/

をスクラップしたいと思います:

library(rvest) 
    url <- "http://www.cbs.dtu.dk/services/SignalP/" 
    seq <- "MTSKTCLVFFFSSLILTNFALAQDRAPHGLAYETPVAFSPSAFDFFHTQPENPDPTFNPCSESGCSPLPVAAKVQGASAKAQESDIVSISTGTRSGIEEHGVVGIIFGLAFAVMM" 

    session <- rvest::html_session(url) 
    form <- rvest::html_form(session)[[2]] 
    form <- rvest::set_values(form, `SEQPASTE` = seq) 
    form_res_cbs <- rvest::submit_form(session, form) 
    #rvest prints out: 
    Submitting with 'trunc' 

rvest::html_text(rvest::html_nodes(form_res_cbs, "head")) 
#ouput: 
"Configuration error" 

rvest::html_text(rvest::html_nodes(form_res_cbs, "body")) 

#ouput: 
"Exception:WebfaceConfigErrorPackage:Webface::service : 358Message:Unhandled #parameter 'NULL' in form " 

を私は未処理のパラメータが何であるかわかりませんよ。 送信ボタンに問題がありますか?私は強制的に見えることはできません。

form_res_cbs <- rvest::submit_form(session, form, submit = "submit") 
#rvest prints out 
Error: Unknown submission name 'submit'. 
Possible values: trunc 

は提出$名がNULLで問題ありますか?

form[["fields"]][[23]] 

私はここで示唆したように、偽の送信ボタンを定義してみました: Submit form with no submit button in rvest

運で。

私はrvestまたはRCurl/HTTRを使用したソリューションに開いています、私はまあ、これはなんとかですRSelenium

答えて

1

を使用しないようにしたいと思います。しかし、それは肘グリースを必要とするだろう。

この部分:

library(rvest) 
library(httr) 
library(tidyverse) 

POST(
    url = "http://www.cbs.dtu.dk/cgi-bin/webface2.fcgi", 
    encode = "form", 
    body=list(
    `configfile` = "/usr/opt/www/pub/CBS/services/SignalP-4.1/SignalP.cf", 
    `SEQPASTE` = "MTSKTCLVFFFSSLILTNFALAQDRAPHGLAYETPVAFSPSAFDFFHTQPENPDPTFNPCSESGCSPLPVAAKVQGASAKAQESDIVSISTGTRSGIEEHGVVGIIFGLAFAVMM", 
    `orgtype` = "euk", 
    `Dcut-type` = "default", 
    `Dcut-noTM` = "0.45", 
    `Dcut-TM` = "0.50", 
    `graphmode` = "png", 
    `format` = "summary", 
    `minlen` = "", 
    `method` = "best", 
    `trunc` = "" 
), 
    verbose() 
) -> res 

はあなたが作っ要求します。私はverbose()を残したので、何が起こるか見ることができます。それは "ファイル名"フィールドがありませんが、文字列を指定したので、あなたが行ったことの良い模倣です。

ここで難しいのは、中間リダイレクトページを使用して、クエリが完了したときに通知用の電子メールアドレスを入力できることです。クエリが終了したかどうかを確認するために通常の(10秒ごとに)チェックを行い、そうであればすぐにリダイレクトします。

ページを介して抽出することができますクエリIDたことを:

content(res, as="parsed") %>% 
    html_nodes("input[name='jobid']") %>% 
    html_attr("value") -> jobid 

を、我々は最終的要求を模倣することができますが、私はレポートが行われていることを確認するためにそうする前にSys.sleep(20)に追加したいです。最終結果ページをつかむ

GET(
    url = "http://www.cbs.dtu.dk/cgi-bin/webface2.fcgi", 
    query = list(
    jobid = jobid, 
    wait = "20" 
), 
    verbose() 
) -> res2 

html_print(HTML(content(res2, as="text"))) 

enter image description here

あなたはGETのみHTMLコンテンツを取得するための画像が欠落している見ることができます。 rvest/xml2の関数を使用してページを解析し、新しいコンテンツを取得するために使用できるテーブルとURLを切り取ることができます。

これを行うには、burpsuiteを使用してブラウザセッションをインターセプトし、次にburrp Rパッケージを使用して結果を検査しました。また、腐った鳥類を視覚的に点検し、より手作業で造ることもできます。

+0

ありがとうございますhrbrmstr!私はちょうどあなたの答えが私の掻き回しの試みの前に私を助けたと付け加えたいと思います。ではごきげんよう! – missuse

+0

webformにファイルをアップロードする方法を教えてください。投稿リクエストの本文に 'SEQSUB' = httr :: upload_file(" temp_1.txt ")を試しました。しかし、私はエラーを受け取ります:enc2utf8のエラー(as.character(url)):引数が文字ベクトルではありません。ここにファイルがあります:https://www.dropbox.com/s/kzdi7za3mcbyw7t/temp_1.txt?dl=0 – missuse

+0

上記の問題を解決しました:encode = "multipart"で十分でした – missuse

関連する問題