爬取网页新闻

Reads: 2042 Edit

1 问题描述

网页可以分为静态网页和动态网页,静态网页指无需经过服务器的编译,直接加载到客户浏览器上显示出来,静态网页一般不需要用户的交互。动态网页则一般需要服务器对数据进行处理后发送到网页中,动态网页往往需要用户的交互。

rvest包是爬取静态网页常用的包,可以非常方便的解析静态网页。网页新闻一般属于静态网页,所以我们这里使用rvest包来爬取网页新闻。

注意:rvest包不能爬取动态网页的内容!有些时候明明在网页上显示出了我们想爬取的内容,但是由于是动态数据,所以用rvest包是无法获取的。

2 爬取新浪网页新闻

r-97

2.1 安装并加载rvest包

> install.packages("rvest")      
> install.packages('tidyverse')
> library(rvest)              #解析网页
> library(tidyverse)           #处理字符串

2.2 定义该网页的网址

> url="https://finance.sina.com.cn/stock/zqgd/2022-04-16/doc-imcwipii4529812.shtml"

2.3 采用read_html()函数解析该网页

> web=read_html(url,encoding = 'utf-8')

2.4 提取网页节点

这一步比较关键,如何确定需要提取内容在网页中的节点位置呢?

可以使用chrome等浏览器的"检查元素"功能。然后点击下图中红色区域图标!

r-98

之后鼠标移到需要提取信息的网页位置,浏览器会自动给出该内容的节点位置:h1.main-title

r-99

> web %>% html_nodes('h1.main-title') %>% html_text()
[1] "央行全面降准,释放5300亿资金!降息还有空间?从预告到落地仅用2天,如何影响股债楼?看最全解读"

说明:采用html_nodes()函数提取了新闻的标题。“%>%”符号可以依次调用函数对内容进行处理!

2.5 提取新闻的内容

采用上面相同的方法,定位到新闻内容,获取该内容的节点位置:div#artibody.article

> web %>% html_nodes('div#artibody.article') %>% html_text()
[1] "\n\t\t\t\t\t\t\t\t\n            \n  从“预告”到落地,降准来了。\n  4月15日晚间,人民银行发布消息称,为支持实体经济发展,促进综合融资成本稳中有降,决定于2022年4月25日下调金融机构存款准备金率0.25个百分点(不含已执行5%存款准备金率的金融机构)。为加大对小微企业和“三农”的支持力度,对没有跨省经营的城商行和存款准备金率高于5%的农商行,在下调存款准备金率0.25个百分点的基础上................

说明:虽然提取了新闻的内容,但是包含了“\t\n”等无关内容!

2.6 清洗提取的新闻内容

采用tidyverse的str_remove_all()函数对内容进行清理!

> web %>% html_nodes('div#artibody.article') %>% html_text() %>% str_remove_all(" ") %>% str_remove_all("\\n") %>% str_remove_all("\\t")
[1] "  从“预告”到落地,降准来了。  4月15日晚间,人民银行发布消息称,为支持实体经济发展,促进综合融资成本稳中有降,决定于2022年4月25日下调金融机构存款准备金率0.25个百分点(不含已执行5%存款准备金率的金融机构)。为加大对小微企业和“三农”的支持力度,对没有跨省经营的城商行和存款准备金率高于5%的农商行,在下调存款准备金率0.25个百分点的基础上,再额外多降0.25个百分点。本次下调后,金融机构加权平均存款准备金率为8.1%。  根据测算,此次降准共计释放长期资金约5300亿元。

Comments

Make a comment