楼主: wyfhdl
6498 10

[问答] rvest 0.3.0版本 中文网页读取乱码 [推广有奖]

  • 5关注
  • 15粉丝

副教授

26%

还不是VIP/贵宾

-

威望
0
论坛币
2514 个
通用积分
137.8577
学术水平
27 点
热心指数
33 点
信用等级
23 点
经验
60603 点
帖子
260
精华
0
在线时间
1248 小时
注册时间
2009-12-21
最后登录
2023-2-21

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. # # # # # # # # # # # # # # # # # PART 1  DO-NOTHING # # # # # # # # # # # # # # # # # # # # #
  2. install.packages("rvest") # Delet after first install
  3. install.packages("dplyr") # Delet after first install
  4. install.packages("ggplot2") # Delet after first install
  5. library(rvest)
  6. library(dplyr)
  7. library(ggplot2)
  8. # Function scrap.f
  9. scrap.f<-function (url) {
  10.   library(rvest)
  11.   library(dplyr)
  12.   web <- rvest::html(url,encoding="utf-8")
  13.   Headline <- web %>% html_nodes("h3 a") %>% html_text()%>%as.character()
  14.   Source <- web %>% html_nodes("p.c-author") %>% html_text() %>% as.character()
  15.   keyword <- web %>% html_nodes("em") %>% html_text()
  16.   keyword <- keyword[1:length(Headline)]%>%as.factor()
  17.   Media <- Source %>% substring(1,regexpr('[0-9]',.)-2)%>%as.factor()
  18.   a <- web %>% html_nodes("a.c-more_link") %>%html_text()%>%grep("相同新闻",.)
  19.   b <- web %>% html_nodes("a.c-more_link") %>%
  20.     html_text()%>%
  21.     substring(regexpr('[0-9]|[0-9][0-9]',.),
  22.               regexpr('[0-9]|[0-9][0-9]',.)+attr(regexpr('[0-9]|[0-9][0-9]',.),'match.length')-1)
  23.   Same_New <- vector(length=length(Headline),mode="numeric")
  24.   Same_New[a]<-b
  25.   Same_New<-Same_New %>% as.numeric()
  26.   TIME <- Source %>% substring(regexpr('((201.{1,})|([0-9].{1,}))(前|日)',.),
  27.                                regexpr('((201.{1,})|([0-9].{1,}))(前|日)',.)+
  28.                                  attr(regexpr('((201.{1,})|([0-9].{1,}))(前|日)',.),'match.length')-1)
  29.   TIME <- sub('[0-9].{1,}前',Sys.Date(),TIME)
  30.   TIME <- gsub('年|月','-',TIME)
  31.   TIME <- gsub('日','',TIME)
  32.   DATE <- as.Date(TIME, format = "%Y-%m-%d")
  33.   Link <- web %>% html_nodes("h3.c-title a") %>% html_attrs() %>% pluck(1,character(1))
  34.   data.frame(Headline,Media,keyword,Same_New,DATE,Link)}

  35. # # # # # # # # # # # # # # # # # PART 2  replace the keyword as you wish # # # # # # # # # # # # # # # # # # # # #
  36. # How mang news you want from 0 to 200, by = 20
  37. Pages <- seq(0,200,20)
  38. # key words, what`s in the box
  39. Keywords <- c("%E5%A5%B6%E7%B2%89",
  40.               "%E7%BE%8E%E8%B5%9E%E8%87%A3",
  41.               "%E5%A4%9A%E7%BE%8E%E6%BB%8B",
  42.               "%E8%B4%9D%E5%9B%A0%E7%BE%8E",
  43.               "%E4%BC%8A%E5%88%A9",
  44.               "%E9%9B%85%E5%9F%B9",
  45.               "%E6%83%A0%E6%B0%8F",
  46.               "%E6%83%A0%E6%B0%8F%E5%90%AF%E8%B5%8B",
  47.               "%E5%90%88%E7%94%9F%E5%85%83",
  48.               "%E8%AF%BA%E4%BC%98%E8%83%BD",
  49.               "%E9%A3%9E%E9%B9%A4",
  50.               "%E7%88%B1%E4%BB%96%E7%BE%8E",
  51.               "%E5%8F%AF%E7%91%9E%E5%BA%B7",
  52.               "%E7%BE%8E%E7%B4%A0%E4%BD%B3%E5%84%BF")

  53. # # # # # # # # # # # # # # # # # PART 3  copy it DO NOTHING # # # # # # # # # # # # # # # # # # # # #
  54. Sites <- data.frame()
  55. for (i in 1:length(Keywords)){
  56.   for (j in 1: length(Pages)){
  57.     Sites[i,j] <- paste("http://news.baidu.com/ns?word=",
  58.                         Keywords[i],
  59.                         "&pn",
  60.                         Pages[j],
  61.                         "&cl=2&ct=1&tn=news&rn=20&ie=utf-8&bt=0&et=0",
  62.                         sep="")}}
  63. Sites_vector <- unlist (Sites)
  64. News <- data.frame()
  65. for (i in 1:length(Sites_vector)){
  66.   News <- rbind(News, scrap.f(Sites_vector[i]))}
  67. News <- News %>% distinct(Headline)

  68. # # # # # # # # # # # # # # # # # PART 4  WHERE TO SAVE # # # # # # # # # # # # # # # # # # # # #
  69. write.csv(News, "E:/RCase/Scrap/DailyNews/New.csv", row.names = FALSE)
复制代码

以上代码是用来抓取百度行业新闻, 但是在rvest 0.3.0的版本下,即便根据新包更改了html()读取中文网页即为乱码
求指导

二维码

扫码加我 拉你入群

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

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

关键词:Vest 中文网页 VES Est 中文网 中文网页 keyword library Media

回帖推荐

jiangbeilu 发表于7楼  查看完整内容

这个仔细阅读一下说明文档吧,老实说,抓取网页的函数太多了,就包都有好几个,什么Rcurl,rvest,httr,xml等等。但基本的东西都是不变的。如果同是html的话,差别应该是不大的。 不像读json,xml,html,这三类函数就有差别了。
犯我华者 虽远必诛
沙发
wyfhdl 发表于 2015-10-7 09:26:02 |只看作者 |坛友微信交流群
顶下。。。

使用道具

藤椅
只会上网 发表于 2015-11-18 17:45:39 |只看作者 |坛友微信交流群
同求乱码问题

使用道具

板凳
jiangbeilu 学生认证  发表于 2015-11-19 00:46:24 |只看作者 |坛友微信交流群
  1. > y
  2. [1] "鐩稿叧鐑偣"
  3. > iconv(y,"utf-8","gbk")
  4. [1] "相关热点"
  5. >
复制代码


这个乱码问题不好解决,因为在设定的时候,读取比较***。
建议你用xml包试试,不需要用这么多的正则表达式。在你找到对应的中文后,再用iconv函数进行转码。
其中编码已经在函数中给出了,希望你能修改好你的代码,成功运行。

使用道具

报纸
jiangbeilu 学生认证  发表于 2015-11-19 00:49:58 |只看作者 |坛友微信交流群
主要是你的运行结果是乱码,我不知道你具体要做什么,一堆正则表达式,现在实在是没心情看,所以不方便改你的代码或者写新的代码。

另外友情提示:html函数现在已经换成了read_html了。

使用道具

地板
只会上网 发表于 2015-11-19 08:55:56 |只看作者 |坛友微信交流群
jiangbeilu 发表于 2015-11-19 00:49
主要是你的运行结果是乱码,我不知道你具体要做什么,一堆正则表达式,现在实在是没心情看,所以不方便改你 ...
想问一下 read_html 和 html_session 有什么不同

使用道具

7
jiangbeilu 学生认证  发表于 2015-11-19 11:07:33 |只看作者 |坛友微信交流群
只会上网 发表于 2015-11-19 08:55
想问一下 read_html 和 html_session 有什么不同
这个仔细阅读一下说明文档吧,老实说,抓取网页的函数太多了,就包都有好几个,什么Rcurl,rvest,httr,xml等等。但基本的东西都是不变的。如果同是html的话,差别应该是不大的。

不像读json,xml,html,这三类函数就有差别了。
已有 1 人评分经验 收起 理由
李会超 + 80 热心帮助其他会员

总评分: 经验 + 80   查看全部评分

使用道具

8
wyfhdl 发表于 2015-11-21 16:41:58 |只看作者 |坛友微信交流群
只会上网 发表于 2015-11-18 17:45
同求乱码问题
如果你不用rvest0.3.0的话, 可以把包降级到0.2.0

使用道具

9
wyfhdl 发表于 2015-12-22 01:25:35 |只看作者 |坛友微信交流群
jiangbeilu 发表于 2015-11-19 11:07
这个仔细阅读一下说明文档吧,老实说,抓取网页的函数太多了,就包都有好几个,什么Rcurl,rvest,httr,xml ...
  1. url <- "http://news.baidu.com/ns?word=%E5%A5%B6%E7%B2%89&pn=20&cl=2&ct=1&tn=news&rn=20&ie=utf-8&bt=0&et=0"

  2. web <- read_html(url, encoding = "utf-8")
  3. Source <- web %>% html_nodes("p.c-author") %>% html_text() %>%
  4.   iconv("utf-8") %>% as.character()
复制代码
在用rvest 0.3.0的包版本, 我尝试用iconv来转码, 但是在source这一段里面遇到问题, 本意是抓取百度新闻中, 公布的媒体名称, 但是在用html_text()后出现了所有都是NA的情况, 请教这是为什么

使用道具

10
jiangbeilu 学生认证  发表于 2015-12-22 08:20:07 |只看作者 |坛友微信交流群
wyfhdl 发表于 2015-12-22 01:25
在用rvest 0.3.0的包版本, 我尝试用iconv来转码, 但是在source这一段里面遇到问题, 本意是抓取百度新闻 ...
我在linux下可以正常读入。估计是你的iconv用法有问题。你看试一下代码跟我的一样,结果是不是一样的。如果不一样的话,就需要再看一下iconv的用法了,我记得不是这样用的。
Screenshot from 2015-12-22 08:17:38.png
Tomorrow is another day!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 10:33