[問題] parsing的中文顯示

看板R_Language作者 (小笨)時間7年前 (2016/06/16 14:02), 7年前編輯推噓2(20107)
留言109則, 4人參與, 最新討論串1/4 (看更多)
現在想要抓全家的網頁當作練習 用這個網站來做練習 http://www.i-write.idv.tw/life/info/familymart/familymart1.html 下面是我的程式碼 library(Rcurl) library(XML) library(httr) klist<-paste0("http://www.i-write.idv.tw/life/info/familymart/ familymart1-",1:7,".html") getURL(klist,encoding="UTF-8")->k htmlParse(k,encoding="UTF-8")->k readHTMLTable(k)->k1 k1[seq(3,length(k1),by=3)]->k2 這樣會得到一個完整的table沒錯,可是除了數字之外其他的都是詭異的亂碼 請問我在parsing的哪個過程需要做修正呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.175.238.8 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1466056948.A.67C.html

06/16 14:41, , 1F
library什麼套件要寫...
06/16 14:41, 1F
※ 編輯: clansoda (1.175.238.8), 06/16/2016 15:02:07

06/16 15:02, , 2F
已修改
06/16 15:02, 2F

06/16 15:26, , 3F
這裡只是windows顯示不出來UTF8的字元而已
06/16 15:26, 3F

06/16 15:29, , 4F
版上搜尋readHTMLTable 有一篇W大的解法
06/16 15:29, 4F

06/16 15:34, , 5F
http://pastebin.com/QhCfqpr0 這是我的解法
06/16 15:34, 5F

06/16 15:34, , 6F
我是都用xml2硬幹... rvest的html_table都會失敗
06/16 15:34, 6F

06/16 15:34, , 7F
除非換去linux/mac才比較簡單的解法(攤手
06/16 15:34, 7F

06/16 15:36, , 8F
網頁編碼板上還有很多篇...可以都去看看
06/16 15:36, 8F

06/16 16:17, , 9F
請問C大 pipeR的%>>% 跟dplyr的%>% 有哪裡不同嗎?
06/16 16:17, 9F

06/16 16:28, , 10F
還有個問題是所謂的node是在html裡面的tag嗎?
06/16 16:28, 10F

06/16 16:29, , 11F
我查看他的manual 卻不理解什麼是node
06/16 16:29, 11F

06/16 16:32, , 12F
%>%是出自magrittr...不是dplyr
06/16 16:32, 12F

06/16 16:32, , 13F
node就是xml的tag沒錯
06/16 16:32, 13F

06/16 16:33, , 14F
我不太用rvest,這裡可以用xml2的xml_find_all取代
06/16 16:33, 14F

06/16 16:34, , 15F
至於%>>%跟%>%的差異,網路上找一下pipeR作者的部落
06/16 16:34, 15F

06/16 16:34, , 16F
格吧
06/16 16:34, 16F

06/16 16:35, , 17F
可是我的package沒有magrittr也可以用%>%耶
06/16 16:35, 17F

06/16 16:35, , 18F
%>>%大多數支援%>%的寫法,不過有一些新功能還不錯
06/16 16:35, 18F

06/16 16:35, , 19F
用,也有比較好的速度
06/16 16:35, 19F

06/16 16:35, , 20F
是depenceies的關係嗎
06/16 16:35, 20F

06/16 16:36, , 21F
因為dplyr會從magrittr import %>%
06/16 16:36, 21F

06/16 16:36, , 22F
所以您比較推薦%>>% 這個用法嗎?
06/16 16:36, 22F

06/16 16:36, , 23F
了解 所以是magrittr 才有%>%
06/16 16:36, 23F

06/16 16:36, , 24F
dplyr是depend on magrittr沒錯
06/16 16:36, 24F

06/16 16:37, , 25F
我比較喜歡%>>%
06/16 16:37, 25F

06/16 16:38, , 26F
那請想請教一下 GET %>% content這個部分
06/16 16:38, 26F

06/16 16:39, , 27F
我GET以後看起來是一串LIST而不是html code
06/16 16:39, 27F

06/16 16:39, , 28F
GET是送request,content是轉成xml_node, text或 ra
06/16 16:39, 28F

06/16 16:39, , 29F
w的函數
06/16 16:39, 29F

06/16 16:40, , 30F
然後content("raw") 是一連串成對的數字 這跟我過去用的
06/16 16:40, 30F

06/16 16:41, , 31F
getURL 所以抓下來的東西完全不同
06/16 16:41, 31F

06/16 16:41, , 32F
所以GET是還沒抓下來的動作嗎? 抱歉因為之前很少做過
06/16 16:41, 32F

06/16 16:41, , 33F
只用過ATTR來抓過資料
06/16 16:41, 33F

06/16 16:42, , 34F
這裡,我可能嘗試的時候沒刪掉,這裡直直接GET>>%
06/16 16:42, 34F

06/16 16:42, , 35F
content %>>% html_nodes("table")N可以
06/16 16:42, 35F

06/16 16:42, , 36F
就可以
06/16 16:42, 36F

06/16 16:48, , 37F
我看了一下那頁的HTML 共有三個</table>
06/16 16:48, 37F

06/16 16:48, , 38F
所以走到這步的時候 這個LIST的三個ELEMENT就各是
06/16 16:48, 38F
還有 31 則推文
06/16 20:10, , 70F
最近常常以人回報這個問題,好怪
06/16 20:10, 70F

06/16 20:10, , 71F
你直接看網頁也可以
06/16 20:10, 71F

06/17 08:55, , 72F
如果要抓中文 還是用 LINUX
06/17 08:55, 72F

06/17 10:23, , 73F
linux不是要用指令嗎 我不太熟
06/17 10:23, 73F

06/17 10:23, , 74F
wush大 我可以用了 swirl 大概了解整個結構了
06/17 10:23, 74F

06/17 10:25, , 75F
linux有桌面板
06/17 10:25, 75F

06/17 11:24, , 76F
C大可以請問一下 為什麼我在你用GET+content那邊用
06/17 11:24, 76F

06/17 11:24, , 77F
read_html的方式 不能得到一樣的答案呢?
06/17 11:24, 77F

06/17 11:25, , 78F
如果我讀單一的頁面用read_html會得到head 跟body兩個
06/17 11:25, 78F

06/17 11:25, , 79F
部分,但是用sapply以後會得到一個pointer開頭的東西
06/17 11:25, 79F

06/17 11:29, , 80F
痾 沒事了,好像是我自己的問文
06/17 11:29, 80F

06/17 11:30, , 81F
只是一開始好像會得到很多問號
06/17 11:30, 81F

06/17 11:30, , 82F
我以為是錯的
06/17 11:30, 82F

06/17 11:40, , 83F
GET %>>% content完就是xml_node的class
06/17 11:40, 83F

06/17 11:40, , 84F
不需要再read_html
06/17 11:40, 84F

06/17 11:40, , 85F
除非content用raw或是text才需要
06/17 11:40, 85F

06/17 12:03, , 86F
我現在已經可以做到把td下面的文字弄成中文
06/17 12:03, 86F

06/17 12:05, , 87F
但是要怎麼弄才能變成table或者dataframe呢
06/17 12:05, 87F

06/17 12:06, , 88F
您的do.call(rbind)這個我一直弄不出來
06/17 12:06, 88F

06/17 12:17, , 89F
%>>% do.call(what = rbind)這寫法只有%>>%可以用
06/17 12:17, 89F

06/17 12:17, , 90F
要用%>% 要改成 %>% do.call(rbind, .)
06/17 12:17, 90F

06/17 12:21, , 91F
他會顯示 second argument must be a list
06/17 12:21, 91F

06/17 12:22, , 92F
我已經用lapply 應該出來的結果會是list才對
06/17 12:22, 92F

06/17 12:22, , 93F
我現在是將抓出來的character轉成matrix再轉成dataframe
06/17 12:22, 93F

06/17 12:23, , 94F
雖然麻煩一點,但是用程式跑也只要寫一次就好了
06/17 12:23, 94F

06/17 12:29, , 95F
嗯? 你寫do.call(rbind)還是do.call(what=rbind)
06/17 12:29, 95F

06/17 12:29, , 96F
我這跑是都沒問題
06/17 12:29, 96F

06/17 12:30, , 97F
看你PIPE是用哪一個,寫法不一樣
06/17 12:30, 97F

06/17 15:41, , 98F
C大,我印象中有個function可以組合數列
06/17 15:41, 98F

06/17 15:42, , 99F
例如 a=1:5 b=1:10 用了這個function 他會 1-1 1-2~1:10
06/17 15:42, 99F

06/17 15:42, , 100F
2-1~2:10 我臨時找不到這個function叫做什麼
06/17 15:42, 100F

06/17 15:55, , 101F
expand.grid?
06/17 15:55, 101F

06/21 16:20, , 102F
C大我有找到方法了
06/21 16:20, 102F

06/21 16:20, , 103F
請問C大,這種網頁是不是完全爬不了
06/21 16:20, 103F


06/21 16:21, , 105F
外面能爬的那個網頁,他大概有幾百個缺漏值,可能他後來
06/21 16:21, 105F

06/21 16:21, , 106F
就不曾更新了,因此有些新開的他就沒加進去了
06/21 16:21, 106F

06/21 16:37, , 107F
沒有爬不了的網頁XD 晚一點再來研究
06/21 16:37, 107F

06/21 16:39, , 108F
感謝,因為它是用aspx的檔案,我看不到他的資料寫在
06/21 16:39, 108F

06/21 16:39, , 109F
哪一個NODE裏頭,所以我很難找出正確的寫法
06/21 16:39, 109F
文章代碼(AID): #1NOa3qPy (R_Language)
文章代碼(AID): #1NOa3qPy (R_Language)