您的位置:首页 > 其它

用R抓取拉手网深圳地区的美食数据--增加商店地址信息

2014-12-05 14:05 330 查看
自从上次在中大会场分享完RCurl爬虫和Shiny包的相关演讲后,有很多同学对这部分的内容很敢兴趣,昨晚有个同学问我演讲中提到的爬团购网数据的例子,按照代码尝试自己去抓商家地址和销售数量时却出错了。今天中午抽空重写了上次演讲内容的代码,增加了商家地址这部分信息,并力求代码的精简。

原文章:利用RCurl包完成自己感兴趣的团购信息【批量】抓取

首先拿深圳拉手网第一页做研究: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)



搞定,收工!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: