【crawler笔记】R语言简单动态网页爬虫(rvest包)示例
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包)示例相关推荐
- org.apache.poi Excel列与行都是动态生成的_网络爬虫:Python动态网页爬虫2种技术方式及示例...
作者:糖甜甜甜 https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug 这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动 ...
- Python动态网页爬虫技术
这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...
- python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫
一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...
- python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫
这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...
- 【Python 爬虫】简单的网页爬虫
这边有一个用来测试的网站点击跳转 简单的网页爬虫 requests的使用 使用requests获取网页的源代码 requests与正则结合 多线爬虫 多进程库 开发多线程爬虫 爬虫算法的开发 深度优先 ...
- Python之简单的网页爬虫开发
Python之简单的网页爬虫开发 文章目录 Python之简单的网页爬虫开发 下面简单介绍一下request: 简单介绍一下什么是第三方库: 结合requests与正则表达式 多线程爬虫 多进程库(m ...
- python(六)动态网页爬虫
python(六)动态网页爬虫 什么是动态网页爬虫 动态网页 在网站不重新加载的情况下(网页的url不发生改变),通过ajax技术动态更新网站中的局部数据. ajax 异步JavaScript和XML ...
- 笔记—R语言做矩阵散点图
笔记-R语言做矩阵散点图 #install.packages("corrgram") #install.packages("GGally") install.p ...
- r语言抓取网页数据_使用R进行网页抓取的简介
r语言抓取网页数据 by Hiren Patel 希伦·帕特尔(Hiren Patel) 使用R进行网页抓取的简介 (An introduction to web scraping using R) ...
- R语言简单指数平滑(自编函数)
系列文章目录 R语言利用贝叶斯分类法(klaR程序包),训练数据集,预测数据的分类 R语言载入arules程序包的Epub数据集,使用Apriori算法,进行关联规则分析 R语言进行系统聚类分析并作图 ...
最新文章
- 知乎「致知计划之科学季」颁奖,创作者分享80万元奖金
- 涉嫌盗取前东家谷歌的代码,一位工程师被判赔1.8亿美金,将全由个人偿还
- 做时间序列预测有必要用深度学习吗?事实证明,梯度提升回归树媲美甚至超越多个DNN模型...
- android里Conversion to Dalvik format failed with error 1错误的解决
- [YTU]_2919( Shape系列-5)
- k8s项目(弹性云实战)
- Node.js 应用故障排查手册 —— 冗余配置传递引发的内存溢出
- 数仓中长跳转问题复现及解决方案
- dedecms 找后台总结_总结找到后台路径的N总思路方法
- 直觉模糊有计算机知识嘛,直觉模糊集理论及应用 上册
- strcmp函数原型 C语言
- android谷歌地图删除marker,无法将marker从google地图上删除
- 植树节的微信软文如何写?素材加文案帮你分分钟搞定!
- 梦幻新开服务器维护,《梦幻西游2》6月新开服务器公告
- C# MVC《捷信达酒店管理系统》项目研发技术总结文献
- Spring框架基础入门
- nobody nogroup linux vi nfs,nfs挂载后权限映射错误(nobody)的解决办法
- [YTU](3166)共享单车 ---bfs
- 从Preact学习hooks原理--useState
- Word2019文档中修订功能
热门文章
- java 进程 互斥锁_Linux 进程互斥锁 - Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere - C++博客...
- python azure-storage-blob库 使用SAS key下载blob文件实例
- Fiddler 4 模拟 服务端返回 json
- CC2530定时器唤醒
- 台达JAVA_wplsoft下载(台达plc编程软件)
- matlab用ezplot绘制参数方程,MATLAB学习1 之画图函数
- C语言程序设计第三版微课版,C语言程序设计(第3版 微课版)
- html在线编辑器 哪个好用,可视化HTML富文本编辑器有哪些?哪个好用?
- Android TIF框架
- CorelDRAWX8安装包下载 全新矢量图形编辑设计工具