1、爬虫目标

大家普遍认为Python的爬虫功能强大,但在解决动态加载或者登陆网站时,Python存在一定困难的,相对于一些普通爬虫,使用R语言会更方便。

以https://www.thepaper.cn/为例,爬取首页的新闻(标题、内容、时间),主要采用的是动态网页中常用的httr包

初始学习时,参考了B站《20分钟入门基于R语言的网络爬虫_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili》的视频,但代码运行出现了报错,所以在原代码上做了修改。

2、代码分析及报错修改

library(rvest)
library(stringr)url <-"https://www.thepaper.cn/"
web <- read_html(url)    #读取html网页的函数news <- web %>% html_nodes('h2 a')
title <- news %>% html_text()  #获取其中的文字部分
link <- news %>% html_attrs()  #获取每个标题对应的网址link1 <- c(1:length(link))
for(i in 1:length(link1))
{link1[i]<- link[[i]][1]
}
link2 <- paste("https://www.thepaper.cn/",link1,sep="")##获得每条新闻的全文
news_content<-c(1:length(link2))
for(i in 1:length(link2))
{web <- read_html(link2[i]){if(length(html_nodes(web,'div.news_txt'))==1)news_content[i]<- html_text(html_nodes(web,'div.news_txt'))elsenews_content[i]<- trimws(str_replace_all((html_text(html_nodes(web,'div.video_txt_l p'))), "[\r\n]" , ""))}
} ##获得每条新闻的时间
news_date <- c(1:length(link2))
for(i in 1:length(link2))
{web <- read_html(link2[i]){if(length(html_nodes(web,'div.news_txt'))==1)news_date[i]<- trimws(str_replace_all((html_text((html_nodes(web, "div p"))[2])), "[\r\n]" , ""))elsenews_date[i]<- trimws(str_replace_all((html_text(html_nodes(web,'div.video_txt_l span'))), "[\r\n]" , ""))}
} date <- c(1:length(link2))
time <- c(1:length(link2))
for(i in 1:length(link2))
{date[i] <- substring(news_date[i],1,10)time[i] <- substring(news_date[i],12,16)   # is.character(news_date[i])
}news_01 <- data.frame(title,date,time,url=link2,news_content)save(news_01,file="news_information.Rdata")
write.csv(news_01,file=" news_information.csv")

Note1:

按F12进入开发者页面,鼠标点击某一标题,则会显示标题对应节点为h2项下的a,具体可参考下图所示:

Note2:

原视频使用以下代码获得每天新闻的文本内容,但出现报错: 更换参数长度为零。如下所示:

> for(i in 1:length(link2))
+ {
+     news_content[i] <- read_html(link2[i]) %>% html_nodes('div.news_txt') %>% html_text()
+ }
Error in news_content[i] <- read_html(link2[i]) %>% html_nodes("div.news_txt") %>%  : 更换参数长度为零

报错原因是,网页中存在纯视频内容,使得通过“div.news_txt”节点获取的参数为0,因此本文的代码中,先对网页内容进行判断,在就文本新闻和视频新闻分别提取文本内容。

Note3:

原视频使用以下代码获得每天新闻的时间,但提取的内容......(本纯真小白猜测可能是因为反爬所以网络升级了!!!)

所以本纯真小白重新找了对应的节点,仍然是在开发者工具页面找。文本的时间位于 "div p"节点,提取出来是含有换行符、空格的字符串;视频页面的时间位于“div.video_txt_l span”,提取出来还有小尾巴(新闻来源)。

Note4

最最重要,虽然有Warning,但是不重要,因为我也解决不了,结果出来了很开心。人生第一次爬虫,成功!

然后就是非常感谢B站的UP主,希望没有侵犯到他人的权益,以上!

3、奇奇怪怪的知识增加了

pacman::p_load(XML,rvest,jiebaR,dplyr,stringr)  一次性载入多个包,含install和library

read_html():读取html文档(网页)的函数;

html_nodes():选取提取文档中指定元素、节点的部分;

html_text():提取标签内的文本;

html_attrs():提取属性名称及其内容;

trimws():去除字符串前后空格;

str_replace_all():替换,本文中是替换了空格\r、换行\n;

is.character():判断是否为字符串形式

【crawler笔记】R语言简单动态网页爬虫(rvest包)示例相关推荐

  1. org.apache.poi Excel列与行都是动态生成的_网络爬虫:Python动态网页爬虫2种技术方式及示例...

    作者:糖甜甜甜 https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug 这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动 ...

  2. Python动态网页爬虫技术

    这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...

  3. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  4. python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  5. 【Python 爬虫】简单的网页爬虫

    这边有一个用来测试的网站点击跳转 简单的网页爬虫 requests的使用 使用requests获取网页的源代码 requests与正则结合 多线爬虫 多进程库 开发多线程爬虫 爬虫算法的开发 深度优先 ...

  6. Python之简单的网页爬虫开发

    Python之简单的网页爬虫开发 文章目录 Python之简单的网页爬虫开发 下面简单介绍一下request: 简单介绍一下什么是第三方库: 结合requests与正则表达式 多线程爬虫 多进程库(m ...

  7. python(六)动态网页爬虫

    python(六)动态网页爬虫 什么是动态网页爬虫 动态网页 在网站不重新加载的情况下(网页的url不发生改变),通过ajax技术动态更新网站中的局部数据. ajax 异步JavaScript和XML ...

  8. 笔记—R语言做矩阵散点图

    笔记-R语言做矩阵散点图 #install.packages("corrgram") #install.packages("GGally") install.p ...

  9. r语言抓取网页数据_使用R进行网页抓取的简介

    r语言抓取网页数据 by Hiren Patel 希伦·帕特尔(Hiren Patel) 使用R进行网页抓取的简介 (An introduction to web scraping using R) ...

  10. R语言简单指数平滑(自编函数)

    系列文章目录 R语言利用贝叶斯分类法(klaR程序包),训练数据集,预测数据的分类 R语言载入arules程序包的Epub数据集,使用Apriori算法,进行关联规则分析 R语言进行系统聚类分析并作图 ...

最新文章

  1. 知乎「致知计划之科学季」颁奖,创作者分享80万元奖金
  2. 涉嫌盗取前东家谷歌的代码,一位工程师被判赔1.8亿美金,将全由个人偿还
  3. 做时间序列预测有必要用深度学习吗?事实证明,梯度提升回归树媲美甚至超越多个DNN模型...
  4. android里Conversion to Dalvik format failed with error 1错误的解决
  5. [YTU]_2919( Shape系列-5)
  6. k8s项目(弹性云实战)
  7. Node.js 应用故障排查手册 —— 冗余配置传递引发的内存溢出
  8. 数仓中长跳转问题复现及解决方案
  9. dedecms 找后台总结_总结找到后台路径的N总思路方法
  10. 直觉模糊有计算机知识嘛,直觉模糊集理论及应用 上册
  11. strcmp函数原型 C语言
  12. android谷歌地图删除marker,无法将marker从google地图上删除
  13. 植树节的微信软文如何写?素材加文案帮你分分钟搞定!
  14. 梦幻新开服务器维护,《梦幻西游2》6月新开服务器公告
  15. C# MVC《捷信达酒店管理系统》项目研发技术总结文献
  16. Spring框架基础入门
  17. nobody nogroup linux vi nfs,nfs挂载后权限映射错误(nobody)的解决办法
  18. [YTU](3166)共享单车 ---bfs
  19. 从Preact学习hooks原理--useState
  20. Word2019文档中修订功能

热门文章

  1. java 进程 互斥锁_Linux 进程互斥锁 - Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere - C++博客...
  2. python azure-storage-blob库 使用SAS key下载blob文件实例
  3. Fiddler 4 模拟 服务端返回 json
  4. CC2530定时器唤醒
  5. 台达JAVA_wplsoft下载(台达plc编程软件)
  6. matlab用ezplot绘制参数方程,MATLAB学习1 之画图函数
  7. C语言程序设计第三版微课版,C语言程序设计(第3版 微课版)
  8. html在线编辑器 哪个好用,可视化HTML富文本编辑器有哪些?哪个好用?
  9. Android TIF框架
  10. CorelDRAWX8安装包下载 全新矢量图形编辑设计工具