R_Language 板


LINE

假設你有一個 data frame 叫 x,其中有一個欄叫 id。因此, myURL <- paste("http://www.ncbi.nlm.nih.gov/gene/", x$id, sep="") 就是所有要去拿取的完整網址。 以下一個為你設計的 function 先餵 R 吃下去。 它可以一次拿取一個網頁裡你要的資料。 myfunc <- function(myURL){ con <- url(myURL) txt <- scan(con, what="character") close(con) txt1 <- paste(txt, sep="", collapse=" ") pattern <- "<dt>Summary</dt> <dd>[[:print:]]+</dd>" re <- regexpr(pattern, txt1) start <- re[1] end <- start[1] + attr(regexpr(pattern, txt1),"match.length") - 1 return(substr(txt1, start + 22, end - 5)) } 再試試看 myfunc("http://www.ncbi.nlm.nih.gov/gene/2597") 的結果是不是你要的。有需要的話自己修一下。 可以的話,就用迴圈把 myURL 一個一個丟給 myfunc() results <- list() for(i in 1:length(myURL)){ results[[i]] <- myfunc(myURL[i]) } 這樣應該就好了。 : 各位好 : 我需要下載數百個基因的資料 : 網址的格式是: : http://www.ncbi.nlm.nih.gov/gene/XXXX : 其中XXXX是這些基因的ID(可能是四個數字或更多) : 比如GAPDH ID是2597 : 那連結就是:http://www.ncbi.nlm.nih.gov/gene/2597 : 如果我的data frame中有一個column是這些IDs : 我應該如何寫出簡單的R scripts來擷取這些網頁中的"Summary"中的敘述 : 並加到原本data.frame中相對應rows 形成一個新的column (不包括"Summary"這字本身) : 例如對GAPDH而言就是 : "This gene encodes ... variants. [provided by RefSeq, Jan 2014]" : 我想應該是用Rcurl跟grep : 但因為完全外行 : 不知道如何逐個ID數值加到Rcurl網址的最後 : 再將下載的網頁以grep搜尋到的strings加到對應的rows裡 : 這樣的問題很不專業 : 如果有任何的提示都歡迎 : 謝謝各位專家 : [程式範例]: : [關鍵字]: R 網頁下載 部分擷取 -- http://apansharing.blogspot.com/ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.37.172
1F:推 kusoayan:我想問一下,如果用 XML 或 selectr 這兩個套件會有什麼 02/04 12:28
2F:→ kusoayan:明顯差異或 drawbacks 嗎? 02/04 12:28
3F:推 stinky:太感謝了! 我回辦公室馬上試試看 02/04 12:44
4F:推 Wush978:我只用過XML, 目前沒感受到什麼明顯的drawback 02/04 12:47
5F:→ Wush978:真的說的話,就是處理中文會遇到的編碼問題吧 02/04 12:47
6F:推 maninblue:推~ 02/04 14:21
7F:推 summitstudio:推範例碼! 02/04 15:02
8F:→ andrew43:這篇的程式碼都只用到R內建的function。 02/04 20:40
9F:→ andrew43:至於XML和selectr這些套件怎麼用我並不了解,但我猜 02/04 20:41
10F:→ andrew43:可能可以在截取網頁內容時會更方便。 02/04 20:41
11F:→ andrew43:其實仔細看我的程式碼,只是很簡單的字串處理而已, 02/04 20:42
12F:→ andrew43:對付格式一致的大量網頁應該夠用了。 02/04 20:43
※ 編輯: andrew43 來自: 122.117.37.172 (02/04 20:43)
13F:推 stinky:謝謝andrew43 非常好用 稍修改後也可運用在其他databases 02/05 13:20
14F:→ stinky:我還有兩個小問題想請教 因為抓取時經常會斷線 02/05 13:22
15F:→ stinky:是否有辦法讓它失敗時自動重複嘗試幾次? 02/05 13:23
16F:→ stinky:又或者讓我指定我可以選擇讓程式從某個row繼續抓? 02/05 13:25
17F:推 stinky:補充一下 因為我想把資料新增在最後一個column 02/05 13:44
18F:→ stinky:所以試了 x$Summary[[i]] <- myfunc(myURL[i]) 有用 02/05 13:46
19F:→ andrew43:重複嘗試可能可以採取 try() 之類錯誤處理的方式解決。 02/05 13:53
20F:→ andrew43:至於一次從特定位置開始抓可能沒辦法。 02/05 13:53
21F:→ andrew43:對方server可能會把你判斷為不友善的client, 02/05 13:55
22F:→ andrew43:不要做得太暴力,或是在loop裡放一些延遲功能。 02/05 13:55
23F:推 stinky:我試將for(i in 1:length(myURL)){ 中的1改成其他數字 02/05 14:25
24F:→ stinky:作為續傳起點 結果可以從斷的資料點繼續 太感謝你了! 02/05 14:26
25F:→ andrew43:喔,我以為你是指從一個網頁的特定位置續傳(這我辦不到 02/06 16:34







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP