2830 12

[问答] R爬虫的字符串替换处理求助求助求助!!!影响了我的睡眠!! [推广有奖]

  • 1关注
  • 1粉丝

博士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
2.0812
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
5986 点
帖子
144
精华
0
在线时间
108 小时
注册时间
2010-9-3
最后登录
2021-3-29

楼主
太阳之子追梦者 发表于 2016-6-7 09:40:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
字符串处理20160607.zip (166.75 KB) 本附件包括:
  • 字符串处理20160607.RData


附件是R文件压缩包,里面是一个length=51的字符串,本人在爬取信息过程中,需要把showOrderComment和<div class='uploadimgdiv'>之间的content替换掉或者删除,这个content影响了我下一步拆分,例子如:
showOrderComment\":{\"id\":97058903,\"guid\":\"4d18d99a-ec9c-47fb-8216-00907e7732ee\",\"content\":\"怎么晒呢?,大家都吃过吧?,还好,哈哈哈哈哈哈哈哈哈<div class='uploadimgdiv'>


各位大神,求助求助求助!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:求助求助 字符串 Content comment length 字符串

回帖推荐

马甲1号 发表于3楼  查看完整内容

这个东西大概是通过jsonp返回html,先用正则表达式把jsonp变成json,再用R的json包解析,最后可以用rvest之类的包解析content中的html,或者直接用正则表达式把div去掉。

沙发
hyu9910 在职认证  发表于 2016-6-7 11:16:50
只要这类字串模式唯一可识别,应该可以处理的哈

藤椅
马甲1号 发表于 2016-6-7 13:45:21
这个东西大概是通过jsonp返回html,先用正则表达式把jsonp变成json,再用R的json包解析,最后可以用rvest之类的包解析content中的html,或者直接用正则表达式把div去掉。
parse.r.txt (386 Bytes)
  1. library(jsonlite)
  2. library(rvest)
  3. rawjsonp=web[5]
  4. #jsonp转json
  5. purejson= regmatches(rawjsonp, regexpr('(?<=^fetchJSON_comment98vv2383\\().*(?=\\);$)',rawjsonp,perl=T))
  6. parsed=fromJSON(purejson) ##json转成R的结构体
  7. print(parsed$comments$showOrderComment$content[9])
  8. gsub('<div.*/div>','',parsed$comments$showOrderComment$content[9])
复制代码
已有 1 人评分经验 论坛币 收起 理由
李会超 + 60 + 40 精彩帖子

总评分: 经验 + 60  论坛币 + 40   查看全部评分

板凳
太阳之子追梦者 发表于 2016-6-7 14:38:09
马甲1号 发表于 2016-6-7 13:45
这个东西大概是通过jsonp返回html,先用正则表达式把jsonp变成json,再用R的json包解析,最后可以用rvest之 ...
不是想要把那一部分截取的,你选择的web[5]只有一个匹配,有的有两个或者3个匹配这个showordercomment,.
以下是我的替换过程,可惜,web中的第一个可以实现替换,第2、3个就不行了
length(web)
p<-c("ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp")#构造替换信息
substr(web2,regexpr("showOrderComment",web2)+16,regexpr("<div class='uploadimgdiv",web2)-1)<-p#替换图片信息

报纸
马甲1号 发表于 2016-6-7 15:01:47
太阳之子追梦者 发表于 2016-6-7 14:38
不是想要把那一部分截取的,你选择的web[5]只有一个匹配,有的有两个或者3个匹配这个showordercomment,.
...
直接用解析过的json操作不是更方便么?为啥非要硬改jsonp?这样用正则表达式乱改可能会破坏json数据结构的,反而难处理。。。搞不懂你的需求。。。
多个div一样搞定
  1. > rawjsonp=web[6]
  2. > #jsonp转json
  3. > purejson= regmatches(rawjsonp, regexpr('(?<=^fetchJSON_comment98vv2383\\().*(?=\\);$)',rawjsonp,perl=T))
  4. > parsed=fromJSON(purejson) ##json转成R的结构体
  5. > print(parsed$comments$showOrderComment$content[8])
  6. [1] "用来快,包装完整的~~~<div class='uploadimgdiv'><img class='uploadimg' border='0'  src='http://img30.360buyimg.com/shaidan/jfs/t2935/142/217926119/75874/c22f37cb/57503c3fN4864f186.jpg' /></div><div class='uploadimgdiv'><img class='uploadimg' border='0'  src='http://img30.360buyimg.com/shaidan/jfs/t2647/256/1966944523/45237/1820383d/57503c3fN37c3b41d.jpg' /></div>"
  7. > tmp=read_html(parsed$comments$showOrderComment$content[8],'UTF-8')%>%html_text()
  8. > Encoding(tmp)='UTF-8'
  9. > print(tmp)
  10. [1] "用来快,包装完整的~~~"
  11. >
复制代码

地板
太阳之子追梦者 发表于 2016-6-7 16:04:26
马甲1号 发表于 2016-6-7 15:01
直接用解析过的json操作不是更方便么?为啥非要硬改jsonp?这样用正则表达式乱改可能会破坏json数据结构的 ...
hello,虽然方法和我想表达的不一样,但是,但是你的方法实现了我想要的结果--------对应的内容都抓取了,great!如parsed$comments$userRegisterTime、parsed$comments$userProvince、parsed$comments$content,非常感谢!
可否批量实现呢?因为你的是web[5],哈哈哈

7
马甲1号 发表于 2016-6-7 17:16:06
太阳之子追梦者 发表于 2016-6-7 16:04
hello,虽然方法和我想表达的不一样,但是,但是你的方法实现了我想要的结果--------对应的内容都抓取了,g ...
写个循环不就可以批量了?或者lapply之类的也行啊。

8
太阳之子追梦者 发表于 2016-6-7 17:28:32
马甲1号 发表于 2016-6-7 17:16
写个循环不就可以批量了?或者lapply之类的也行啊。
已经可以循环了。
不过我还有个问题,我爬取京东数据时候,使用readLines函数循环,但是一样的代码,得出的结果却不一样,有时候400页,有时候500页。可否有更好的方式避免中断?

9
太阳之子追梦者 发表于 2016-6-7 17:43:46
hyu9910 发表于 2016-6-7 11:16
只要这类字串模式唯一可识别,应该可以处理的哈
可有实际方法?

10
hyu9910 在职认证  发表于 2016-6-7 19:11:50
太阳之子追梦者 发表于 2016-6-7 17:43
可有实际方法?
我做过的相近的项目,譬如网页字符串识别萃取,或者金融大数据的模式获取数据。  除了有些大数据应用可能有速度性能的要求,真的,我回忆不到特别的难点啦。

再长的字串,你分段处理,只要模式唯一可识别,有啥难哈?  如果出错,你应该首先怀疑你的测试工作还没完整。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:50