用R里的包Rcurl和正则表达式,代码如下
url1='http://www.dianping.com/search/category/2/10/g110'web=readLines(url1,encoding='UTF-8'); #逐行读取网页源文件
data_name<-web[grep("data-name",web)];#找出含字符data-name的行
shop_name<-substr(data_name,regexpr('data-name=\"',data_name)+12,nchar(data_name)-28) #仔细看网页源文件,算出具体的字符位置
> shop_name [1] "滋味港式粥火锅(工体店)" "宴山自助火锅(大悦城店)" [3] "簋小山城(亚运村店)" "女队长重庆火锅(工体店)" [5] "一湖重庆老火锅(燕莎桥店)" "色煮艺 • 私房火锅(蓝色港湾汇中天恒店)" [7] "女队长重庆火锅(望京店)" "格老灶火锅(悠唐店)" [9] "娘火锅(亚运村店)" "只耳冷锅鱼(保利店)" [11] "野菜日式火锅" "坊胜利饭店(四道口店)" [13] "军涮(广外店)" "火UFO芝士排骨&即席年糕火锅(南锣鼓巷店)" [15] "林串串香(东直门簋街店)" "格老灶火锅(石景山店)" [17] "方格火锅" "道火锅运动主题餐厅(天阶店)" [19] "塘火锅" "坊胜利饭店(大成路店)" [21] "簋小山城(簋街二店)"
主要函数注释:
grep("goods-name",web):在web行文件中,寻找含有字符”goods-name”内容的行,返回行号
position <- regexpr('_',a):regexpr()函数对字符的定位很有用,返回值position为特定字符的位置,如字符串a中’_’的位置
nchar(a):返回a的字符个数