用R抓取拉手网深圳地区的美食数据--增加商店地址信息
自从上次在中大会场分享完RCurl爬虫和Shiny包的相关演讲后,有很多同学对这部分的内容很敢兴趣,昨晚有个同学问我演讲中提到的爬团购网数据的例子,按照代码尝试自己去抓商家地址和销售数量时却出错了。今天中午抽空重写了上次演讲内容的代码,增加了商家地址这部分信息,并力求代码的精简。
原文章:
首先拿深圳拉手网第一页做研究:http://shenzhen.lashou.com/cate/meishi
url1='http://shenzhen.lashou.com/cate/meishi'
web=readLines(url1,encoding='UTF-8')
查看抓取下面网页的关键信息,截图如下:
接下来要用正则表达式去抓取商家地址、商家名称、商家描述、折扣价和原来价格等信息。(因有些未有销售数量的商家是没有number描述,故在次先不研究销售数量。
如下面截图的商家因销售数量为0,故网页源码没有number统计:
接下来,利用正则表达式抓取团购网各商家名称,代码如下:
goods_name<-web[grep("goods-name",web)]
[1] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/8095699.html\" target=\"_blank\" title=\"【国贸】蓬客精品酒店(西餐厅)\">【国贸】蓬客精品酒店(西餐厅)</a>"
[2] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9417537.html\" target=\"_blank\" title=\"【科技园】大桥日本料理(科兴科学园店)\">【科技园】大桥日本料理(科兴科学园店)</a>"
[3] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/7486383.html\" target=\"_blank\" title=\"【国贸】潮泰轩贵宾楼(彭年店)\">【国贸】潮泰轩贵宾楼(彭年店)</a>"
[4] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/8019130.html\" target=\"_blank\" title=\"【地王大厦/KKmall】摩登克斯酒店(无国界自助餐厅)\">【地王大厦/KKmall】摩登克斯酒店(无国界自助餐厅)</a>"
[5] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9499473.html\" target=\"_blank\" title=\"【3店通用】台中牛排馆\">【3店通用】台中牛排馆</a>"
[6] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/8572379.html\" target=\"_blank\" title=\"【2店通用】顺德天\">【2店通用】顺德天</a>"
.............................................................................................................................................
[50] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/8748217.html\" target=\"_blank\" title=\"【市民中心】浅野台湾雪锅\">【市民中心】浅野台湾雪锅</a>"
[51] " <a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9610775.html\" target=\"_blank\" title=\"【沙头角】11区(壹海城店)\">【沙头角】11区(壹海城店)</a>"
[52] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9613013.html\" target=\"_blank\" title=\"【沙井】藕厨\">【沙井】藕厨</a>"
[53] " <a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9630235.html\" target=\"_blank\" title=\"【黄贝岭】当归巧坊Return\">【黄贝岭】当归巧坊Return</a>"
[54] " <a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9630887.html\" target=\"_blank\" title=\"【3店通用】M63法式甜品\">【3店通用】M63法式甜品</a>"
[55] "<a class=\"goods-name\" href=\"http://shenzhen.lashou.com/deal/9553105.html\" target=\"_blank\" title=\"【国贸】藤原寿司\">【国贸】藤原寿司</a>"
每页有55个商家,接下来提取商家名,
goods_name<-substr(goods_name,regexpr("\">",goods_name)+2,nchar(goods_name)-4) #goods_name
结果如下:
[1] "【国贸】蓬客精品酒店(西餐厅)"
[2] "【科技园】大桥日本料理(科兴科学园店)"
[3] "【国贸】潮泰轩贵宾楼(彭年店)"
[4] "【地王大厦/KKmall】摩登克斯酒店(无国界自助餐厅)"
[5] "【3店通用】台中牛排馆"
[6] "【2店通用】顺德天"
[7] "【2店通用】粤膳和养生坊"
[8] "【海岸城/保利】蓬客精品酒店(海岸城店)"
[9] "【华侨城】四海一家(南山中心区)"
[10] "【黄贝岭】黄记煌"
[11] "【34店通用】尊宝比萨"
[12] "【海岸城/保利】仙芋世家"
[13] "【1080店通用】幸福西饼"
[14] "【宝安南路沿线】金钱豹"
[15] "【龙岗中心区】隐秀山居酒店西餐厅"
[16] "【民治】汉釜宫韩式自助烤肉(民治店)"
[17] "【观澜】冠菌海鲜肥牛火锅"
[18] "【宝安南路沿线】炭烤肥牛"
[19] "【龙岗中心区】大桥日本料理(龙岗店)"
[20] "【西丽】常之乐猪肚鸡"
[21] "【沙井】希尔顿花园酒店"
[22] "【梅林】国宝通客家海鲜酒楼(梅林店)"
[23] "【6店通用】芒果捞"
[24] "【港隆城】冠菌海鲜肥牛自助火锅(流塘店)"
[25] "【香蜜湖】好世界国宴店"
[26] "【龙岗中心区】粿然茶餐厅"
[27] "【2店通用】圣多斯巴西烤肉"
[28] "【南头】廖记棒棒鸡"
[29] "【4店通用】五谷芳乳鸽王"
[30] "【坪山】重庆冒菜(八分店)"
[31] "【南油】绝味鸭脖(登良路店)"
[32] "【横岗】大世喜茶餐厅"
[33] "【南头】廖记棒棒鸡"
[34] "【沙头角】11区(壹海城店)"
[35] "【2店通用】安琪蛋糕店"
[36] "【白石洲】冠菌海鲜肥牛自助火锅"
[37] "【2店通用】王品台塑牛排"
[38] "【观澜】冠菌海鲜肥牛火锅"
[39] "【国贸】领鲜环球自助餐"
[40] "【6店通用】大汉堡"
[41] "【5店通用】亚马逊巴西烤肉"
[42] "【华强北】水城黄焖鸡米饭"
[43] "【坪山】重庆冒菜(八分店)"
[44] "【华强北】花园格兰云天大酒店"
[45] "【9店通用】哈根达斯"
[46] "【福田CBD】贵哥卤肉卷"
[47] "【4店通用】好景面包坊"
[48] "【沙井】艺丰美食"
[49] "【南头】廖记棒棒鸡"
[50] "【市民中心】浅野台湾雪锅"
[51] "【沙头角】11区(壹海城店)"
[52] "【沙井】藕厨"
[53] "【黄贝岭】当归巧坊Return"
[54] "【3店通用】M63法式甜品"
[55] "【国贸】藤原寿司"
提取关键信息的完整代码如下:
因为拉手深圳地区美食一共有150页,如何统计网页数量请查看之前的文章。
利用for循环将网页都先抓下放一起,再重复刚才的提取字段代码即可完成所有商家的抓取工作。
循环代码如下:
短短几行代码就可以完成团购网的数据抓取工作,是否so easy呢。
最后,附上完整代码:
url1='http://shenzhen.lashou.com/cate/meishi'
web=readLines(url1,encoding='UTF-8')
for(i in 2:150){
web1<-NULL
url<-paste(url,"/page",i,sep="")
web1<-readLines(url,encoding='UTF-8')
web<-c(web,web1)
}
# #### 提取关键字段信息 ####
place<-web[grep("class=\"goods-place\"",web)]
place<-substr(place,regexpr("\">",place)+3,regexpr("</",place)-2) #place
goods_name<-web[grep("goods-name",web)]
goods_name<-substr(goods_name,regexpr("\">",goods_name)+2,nchar(goods_name)-4) #goods_name
goods_text<-web[grep("goods-text",web)]
goods_text<-substr(goods_text,regexpr("\">",goods_text)+2,nchar(goods_text)-4) #goods_text
price<-web[grep("class=\"price\"",web)]
price<-substr(price,regexpr("</em>",price)+5,nchar(price)-7) #price
org_price<-web[grep("class=\"money\"",web)]
org_price<-substr(org_price,regexpr("<del>",org_price)+5,nchar(org_price)-13) #org_price
result<-data.frame(place=place,goods_name=goods_name,goods_text=goods_text,price=price,
org_price=org_price)
head(result)
搞定,收工!
点击“阅读原文”,查看作者原文哦!