博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
r语言电商网站爬虫
阅读量:5997 次
发布时间:2019-06-20

本文共 1330 字,大约阅读时间需要 4 分钟。

由于电商网站的数据的实时性要求,数据分析时一般直接从网页爬取。因此使用爬虫的方法显得十分重要。R作为数据分析的软件,可以直接对爬取的数据进行后续处理,加上上手快的特点,是电商网站数据爬取和分析的好工具。

下面以?http://cn.shopbop.com/为例 简单分享下使用Rcurl对网站进行数据爬取的过程。

首先需要在Rgui里安装需要的软件包

require("RCurl")

require("rjson")

require(stringr)

require(XML)

#得到网页地址,并将其转换成html源码

url = "http://cn.shopbop.com/"

doc = getURL(url) 

txt = htmlParse(doc, asText = TRUE)

print(txt)

#由于获取网页中商品数据需要对html源码结构进行分析,因此可以直接在浏览器中查看后,再到R中进行编辑

 

 

在源码中很容易找到网站导航中子网站的网址

#因此可以通过xmlPath语言找到相应子网站的节点

a <- getNodeSet(txt, path = "//a[@class = 'parent topnav-logged-in ']")#找到子网页的xml路径?

 

如果得到的中文有乱码,则需要对编码进行转换

b <- sapply(a,xmlValue)

c <- iconv(b,"utf-8","gbk")

c

否则 可以通过xmlGetAttr函数 得到所需的attributes

?d <- sapply(a,xmlGetAttr , "href")#获取子网页

??由于得到的只是子网页的路径,要获取子网页的数据 需要用paste链接网站根目录地址

d1=paste(url,d[1],sep="" )

?#对于批量爬取商品的信息还需要获取商品展示子网页的页数

?每页显示40个商品,一共有1200个商品。 

???通过网址,我们很容易了解商品展示页的地址规则。

#因此,可以通过一个简单的循环来获取所有网页的地址,从而获取每个网页的所有商品信息。???

a <- getNodeSet(txt, path = "//span[@class = 'page-number']")#找到子网页的xml路径?(部分代码省略)

d <- sapply(a,xmlGetAttr , "data-number-link")#获取子网页中的目录

pagenum=strsplit(d,"=")

maxpagenum=0;

for(i in 1:length(pagenum)){

  maxpagenum[i]= pagenum[[i]][3]

  

  

}

maxpagenum=max(as.numeric(maxpagenum))

#[1] 1200

 

#在获得所有网页后,获取所有商品的信息就变得简单了,只要循环对每个网页的信息进行xml关键字的爬取

#名称信息?

?图片信息

?价格信息

?通过文本处理和输出,就可以将其进行保存和后续的数据分析。

  

转载于:https://www.cnblogs.com/tecdat/p/11096769.html

你可能感兴趣的文章
iOS中的translucent和automaticallyAdjustsScrollViewInsets用法
查看>>
设置CentOS6.5时钟同步
查看>>
MySQL提示:The server quit without updating PID file问题的解决办法
查看>>
SudaMod-81.0 / crDroidAndroid-8.1(android-8.1.0_r20)红米3 2018年5月3日更新
查看>>
ORA-01861: 文字与格式字符串不匹配
查看>>
DevExpress使用的过期版本解决方法
查看>>
Angular动态编译Html
查看>>
ABP入门系列目录——学习Abp框架之实操演练
查看>>
多线程之线程同步
查看>>
深入解析开源项目之Universal-Image-Loader(二)硬盘---缓存篇
查看>>
C语言 · c++_ch02_01(打印元音字母的ASCII码)
查看>>
SQL批量更新数据
查看>>
微信小程序 网络请求之re.request 和那些坑
查看>>
[LeetCode] Find Mode in Binary Search Tree 找二分搜索数的众数
查看>>
IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)
查看>>
定制WinEdt 优化Latex输入
查看>>
Nginx+Tomcat实现动静分离
查看>>
hibernate 在做更新和删除的时候一定要把事务开启
查看>>
将已有jar添加至本地maven仓库
查看>>
获取用户的真实ip
查看>>