现在想要抓全家的网页当作练习
用这个网站来做练习
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的哪个过程需要做修正呢
这里只是windows显示不出来UTF8的字符而已版上搜寻readHTMLTable 有一篇W大的解法
http://pastebin.com/QhCfqpr0 这是我的解法我是都用xml2硬干... rvest的html_table都会失败除非换去linux/mac才比较简单的解法(摊手网页编码板上还有很多篇...可以都去看看
请问C大 pipeR的%>>% 跟dplyr的%>% 有哪里不同吗?还有个问题是所谓的node是在html里面的tag吗?我查看他的manual 却不理解什么是node
%>%是出自magrittr...不是dplyrnode就是xml的tag没错我不太用rvest,这里可以用xml2的xml_find_all取代至于%>>%跟%>%的差异,网络上找一下pipeR作者的部落格吧
可是我的package没有magrittr也可以用%>%耶
%>>%大多数支援%>%的写法,不过有一些新功能还不错用,也有比较好的速度
因为dplyr会从magrittr import %>%
所以您比较推荐%>>% 这个用法吗?了解 所以是magrittr 才有%>%
那请想请教一下 GET %>% content这个部分我GET以后看起来是一串LIST而不是html code
GET是送request,content是转成xml_node, text或 raw的函数
然后content("raw") 是一连串成对的数字 这跟我过去用的getURL 所以抓下来的东西完全不同所以GET是还没抓下来的动作吗? 抱歉因为之前很少做过只用过ATTR来抓过资料
这里,我可能尝试的时候没删掉,这里直直接GET>>%content %>>% html_nodes("table")N可以就可以
我看了一下那页的HTML 共有三个</table>所以走到这步的时候 这个LIST的三个ELEMENT就各是这三个TABLE的html了是嘛
三个table第一个table包了二三个table,第二个看起来是空的是的
那想请问 '[['(3) 这个用法我从来没看过 看来是指抽出第三个table 可是为什么是这样写呢感谢C大的讲解,我有看懂这个pattern了 第二个table看起来很小 好像是塞了图片在里面
'[['(3) 这样写是为了%>>%list_obj[[3]]跟 '[['(list_obj, 3)是一样的pastebin做了一点修改,把rvest移除,全用xml2处理
所以'[['(3) 代表list 第三个element是嘛?
C大请问一下 你在xml_find_all 后面用了两个table我自己测//table 的写法会跟html_nodes("table")一样,那为什么写两个会变成只剩两个table呢?
前面有说,第一个table包了后两个这里的目标应该是第一个table的第二个所以我就只找table下的table这样第一个table就不会包含进来了
喔喔 所以假如有三层 有一个超大的包中的再包小的我的写法就会变成xml_find_all("/table/table/talbe")
/跟//是不一样的 /是下一层,//是中间隔好几层如果三层应该通常正确是 table/tr/td/table/tr/td/.为了简化 就会写成 table//table//table
wush大,我之前也有想要去看一下这个,但是我一装他就崩溃了
作者:
Wush978 (拒看低质媒体)
2016-06-16 20:10:00最近常常以人回报这个问题,好怪你直接看网页也可以
作者:
psinqoo (零度空間)
2016-06-17 08:55:00如果要抓中文 还是用 LINUX
linux不是要用指令吗 我不太熟wush大 我可以用了 swirl 大概了解整个结构了
C大可以请问一下 为什么我在你用GET+content那边用read_html的方式 不能得到一样的答案呢?如果我读单一的页面用read_html会得到head 跟body两个部分,但是用sapply以后会得到一个pointer开头的东西疴 没事了,好像是我自己的问文只是一开始好像会得到很多问号我以为是错的
GET %>>% content完就是xml_node的class不需要再read_html除非content用raw或是text才需要
我现在已经可以做到把td下面的文字弄成中文但是要怎么弄才能变成table或者dataframe呢您的do.call(rbind)这个我一直弄不出来
%>>% do.call(what = rbind)这写法只有%>>%可以用要用%>% 要改成 %>% do.call(rbind, .)
他会显示 second argument must be a list我已经用lapply 应该出来的结果会是list才对我现在是将抓出来的character转成matrix再转成dataframe虽然麻烦一点,但是用程式跑也只要写一次就好了
嗯? 你写do.call(rbind)还是do.call(what=rbind)我这跑是都没问题看你PIPE是用哪一个,写法不一样
C大,我印象中有个function可以组合数列例如 a=1:5 b=1:10 用了这个function 他会 1-1 1-2~1:102-1~2:10 我临时找不到这个function叫做什么
感谢,因为它是用aspx的档案,我看不到他的资料写在哪一个NODE里头,所以我很难找出正确的写法