R_Language 板


LINE

現在想要抓全家的網頁當作練習 用這個網站來做練習 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://webptt.com/m.aspx?n=bbs/R_Language/M.1466056948.A.67C.html
1F:→ celestialgod: library什麼套件要寫... 06/16 14:41
※ 編輯: clansoda (1.175.238.8), 06/16/2016 15:02:07
2F:→ clansoda: 已修改 06/16 15:02
3F:→ celestialgod: 這裡只是windows顯示不出來UTF8的字元而已 06/16 15:26
4F:→ celestialgod: 版上搜尋readHTMLTable 有一篇W大的解法 06/16 15:29
5F:→ celestialgod: http://pastebin.com/QhCfqpr0 這是我的解法 06/16 15:34
6F:→ celestialgod: 我是都用xml2硬幹... rvest的html_table都會失敗 06/16 15:34
7F:→ celestialgod: 除非換去linux/mac才比較簡單的解法(攤手 06/16 15:34
8F:→ celestialgod: 網頁編碼板上還有很多篇...可以都去看看 06/16 15:36
9F:→ clansoda: 請問C大 pipeR的%>>% 跟dplyr的%>% 有哪裡不同嗎? 06/16 16:17
10F:→ clansoda: 還有個問題是所謂的node是在html裡面的tag嗎? 06/16 16:28
11F:→ clansoda: 我查看他的manual 卻不理解什麼是node 06/16 16:29
12F:→ celestialgod: %>%是出自magrittr...不是dplyr 06/16 16:32
13F:→ celestialgod: node就是xml的tag沒錯 06/16 16:32
14F:→ celestialgod: 我不太用rvest,這裡可以用xml2的xml_find_all取代 06/16 16:33
15F:→ celestialgod: 至於%>>%跟%>%的差異,網路上找一下pipeR作者的部落 06/16 16:34
16F:→ celestialgod: 格吧 06/16 16:34
17F:→ clansoda: 可是我的package沒有magrittr也可以用%>%耶 06/16 16:35
18F:→ celestialgod: %>>%大多數支援%>%的寫法,不過有一些新功能還不錯 06/16 16:35
19F:→ celestialgod: 用,也有比較好的速度 06/16 16:35
20F:→ clansoda: 是depenceies的關係嗎 06/16 16:35
21F:→ celestialgod: 因為dplyr會從magrittr import %>% 06/16 16:36
22F:→ clansoda: 所以您比較推薦%>>% 這個用法嗎? 06/16 16:36
23F:→ clansoda: 了解 所以是magrittr 才有%>% 06/16 16:36
24F:推 celestialgod: dplyr是depend on magrittr沒錯 06/16 16:36
25F:→ celestialgod: 我比較喜歡%>>% 06/16 16:37
26F:→ clansoda: 那請想請教一下 GET %>% content這個部分 06/16 16:38
27F:→ clansoda: 我GET以後看起來是一串LIST而不是html code 06/16 16:39
28F:→ celestialgod: GET是送request,content是轉成xml_node, text或 ra 06/16 16:39
29F:→ celestialgod: w的函數 06/16 16:39
30F:→ clansoda: 然後content("raw") 是一連串成對的數字 這跟我過去用的 06/16 16:40
31F:→ clansoda: getURL 所以抓下來的東西完全不同 06/16 16:41
32F:→ clansoda: 所以GET是還沒抓下來的動作嗎? 抱歉因為之前很少做過 06/16 16:41
33F:→ clansoda: 只用過ATTR來抓過資料 06/16 16:41
34F:→ celestialgod: 這裡,我可能嘗試的時候沒刪掉,這裡直直接GET>>% 06/16 16:42
35F:→ celestialgod: content %>>% html_nodes("table")N可以 06/16 16:42
36F:→ celestialgod: 就可以 06/16 16:42
37F:→ clansoda: 我看了一下那頁的HTML 共有三個</table> 06/16 16:48
38F:→ clansoda: 所以走到這步的時候 這個LIST的三個ELEMENT就各是 06/16 16:48
39F:→ clansoda: 這三個TABLE的html了是嘛 06/16 16:48
40F:→ celestialgod: 三個table第一個table包了二三個table,第二個看起 06/16 16:49
41F:→ celestialgod: 來是空的 06/16 16:49
42F:→ celestialgod: 是的 06/16 16:49
43F:→ clansoda: 那想請問 '[['(3) 這個用法我從來沒看過 看來是指抽出 06/16 16:50
44F:→ clansoda: 第三個table 可是為什麼是這樣寫呢 06/16 16:50
45F:→ clansoda: 感謝C大的講解,我有看懂這個pattern了 第二個table 06/16 16:51
46F:→ clansoda: 看起來很小 好像是塞了圖片在裡面 06/16 16:52
47F:→ celestialgod: '[['(3) 這樣寫是為了%>>% 06/16 16:56
48F:→ celestialgod: list_obj[[3]]跟 '[['(list_obj, 3)是一樣的 06/16 16:56
49F:→ celestialgod: pastebin做了一點修改,把rvest移除,全用xml2處理 06/16 16:59
50F:→ clansoda: 所以'[['(3) 代表list 第三個element是嘛? 06/16 17:03
51F:→ celestialgod: 對 06/16 17:03
52F:→ clansoda: C大請問一下 你在xml_find_all 後面用了兩個table 06/16 17:10
53F:→ clansoda: 我自己測//table 的寫法會跟html_nodes("table") 06/16 17:10
54F:→ clansoda: 一樣,那為什麼寫兩個會變成只剩兩個table呢? 06/16 17:10
55F:→ celestialgod: 前面有說,第一個table包了後兩個 06/16 17:11
56F:→ celestialgod: 這裡的目標應該是第一個table的第二個 06/16 17:11
57F:→ celestialgod: 所以我就只找table下的table 06/16 17:11
58F:→ celestialgod: 這樣第一個table就不會包含進來了 06/16 17:12
59F:→ clansoda: 喔喔 所以假如有三層 有一個超大的包中的再包小的 06/16 17:15
60F:→ clansoda: 我的寫法就會變成xml_find_all("/table/table/talbe") 06/16 17:16
61F:→ celestialgod: /跟//是不一樣的 /是下一層,//是中間隔好幾層 06/16 17:24
62F:→ celestialgod: 如果三層應該通常正確是 table/tr/td/table/tr/td/. 06/16 17:25
63F:→ celestialgod: 為了簡化 就會寫成 table//table//table 06/16 17:25
64F:→ Wush978: 翻轉教室中的 02-RDataEngineer-02-XML 有R處理XML的教學 06/16 19:00
65F:→ Wush978: 如果趕時間,可以看一下: http://0rz.tw/souVP 06/16 19:00
66F:→ Wush978: 也許有幫助 06/16 19:00
67F:→ celestialgod: wush一出手,便知有沒有 06/16 19:34
68F:→ clansoda: wush大,我之前也有想要去看一下這個,但是我一裝 06/16 19:43
69F:→ clansoda: 他就崩潰了 06/16 19:43
70F:→ Wush978: 最近常常以人回報這個問題,好怪 06/16 20:10
71F:推 Wush978: 你直接看網頁也可以 06/16 20:10
72F:→ psinqoo: 如果要抓中文 還是用 LINUX 06/17 08:55
73F:→ clansoda: linux不是要用指令嗎 我不太熟 06/17 10:23
74F:→ clansoda: wush大 我可以用了 swirl 大概了解整個結構了 06/17 10:23
75F:→ celestialgod: linux有桌面板 06/17 10:25
76F:→ clansoda: C大可以請問一下 為什麼我在你用GET+content那邊用 06/17 11:24
77F:→ clansoda: read_html的方式 不能得到一樣的答案呢? 06/17 11:24
78F:→ clansoda: 如果我讀單一的頁面用read_html會得到head 跟body兩個 06/17 11:25
79F:→ clansoda: 部分,但是用sapply以後會得到一個pointer開頭的東西 06/17 11:25
80F:→ clansoda: 痾 沒事了,好像是我自己的問文 06/17 11:29
81F:→ clansoda: 只是一開始好像會得到很多問號 06/17 11:30
82F:→ clansoda: 我以為是錯的 06/17 11:30
83F:→ celestialgod: GET %>>% content完就是xml_node的class 06/17 11:40
84F:→ celestialgod: 不需要再read_html 06/17 11:40
85F:→ celestialgod: 除非content用raw或是text才需要 06/17 11:40
86F:→ clansoda: 我現在已經可以做到把td下面的文字弄成中文 06/17 12:03
87F:→ clansoda: 但是要怎麼弄才能變成table或者dataframe呢 06/17 12:05
88F:→ clansoda: 您的do.call(rbind)這個我一直弄不出來 06/17 12:06
89F:→ celestialgod: %>>% do.call(what = rbind)這寫法只有%>>%可以用 06/17 12:17
90F:→ celestialgod: 要用%>% 要改成 %>% do.call(rbind, .) 06/17 12:17
91F:→ clansoda: 他會顯示 second argument must be a list 06/17 12:21
92F:→ clansoda: 我已經用lapply 應該出來的結果會是list才對 06/17 12:22
93F:→ clansoda: 我現在是將抓出來的character轉成matrix再轉成dataframe 06/17 12:22
94F:→ clansoda: 雖然麻煩一點,但是用程式跑也只要寫一次就好了 06/17 12:23
95F:→ celestialgod: 嗯? 你寫do.call(rbind)還是do.call(what=rbind) 06/17 12:29
96F:→ celestialgod: 我這跑是都沒問題 06/17 12:29
97F:→ celestialgod: 看你PIPE是用哪一個,寫法不一樣 06/17 12:30
98F:→ clansoda: C大,我印象中有個function可以組合數列 06/17 15:41
99F:→ clansoda: 例如 a=1:5 b=1:10 用了這個function 他會 1-1 1-2~1:10 06/17 15:42
100F:→ clansoda: 2-1~2:10 我臨時找不到這個function叫做什麼 06/17 15:42
101F:→ celestialgod: expand.grid? 06/17 15:55
102F:→ clansoda: C大我有找到方法了 06/21 16:20
103F:→ clansoda: 請問C大,這種網頁是不是完全爬不了 06/21 16:20
104F:→ clansoda: http://www.family.com.tw/marketing/inquiry.aspx 06/21 16:21
105F:→ clansoda: 外面能爬的那個網頁,他大概有幾百個缺漏值,可能他後來 06/21 16:21
106F:→ clansoda: 就不曾更新了,因此有些新開的他就沒加進去了 06/21 16:21
107F:→ celestialgod: 沒有爬不了的網頁XD 晚一點再來研究 06/21 16:37
108F:→ clansoda: 感謝,因為它是用aspx的檔案,我看不到他的資料寫在 06/21 16:39
109F:→ clansoda: 哪一個NODE裏頭,所以我很難找出正確的寫法 06/21 16:39







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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP