使用RSelenium+rvest模拟浏览器爬取阿里巴巴商品信息

######################################################## 
#-------------------------------------------------------
# Topic:模拟浏览器访问alibaba爬虫
# Author:
# Date:Sun Mar 08 19:00:35 2020
# Mail:
#-------------------------------------------------------
########################################################

#-------------------------------------------------------
#Function1:从百度进入Alibaba的主页
#-------------------------------------------------------


library(RSelenium)
library(rvest)
library(stringr)
remDr<-remoteDriver(browserName="chrome",remoteServerAddr="localhost",port=4445L)
remDr$open()
url<-"http://www.baidu.com"
remDr$navigate(url)
search_box<-'//*[@id="kw"]'
search_box<-remDr$findElement(using = "xpath",search_box)
remDr$mouseMoveToLocation(webElement = search_box)
search_box$sendKeysToElement(list("阿里巴巴",key="enter"))
url_dir<-'//*[@id="2"]/h3/a' #这里的路径是当时我搜索的路径,不同时间搜索可能结果不同
url_dir<-remDr$findElement(using = "xpath",url_dir)
remDr$mouseMoveToLocation(webElement = url_dir)
remDr$click()
#-------------------------------------------------------
#Function2:使用alibaba模拟检索
#-------------------------------------------------------


myswitch(remDr,remDr$getWindowHandles()[[2]])
remDr$getCurrentUrl()
ali_search<-'//*[@id="J_SC_header"]/header/div[2]/div[3]/div/div/form/div[2]/input'
ali_search<-remDr$findElement(using = "xpath",ali_search)
ali_search$sendKeysToElement(list("25mm mink eyelashes",key="enter"))
list_vis<-'//*[@id="root"]/div/div[3]/div[1]/div[2]/div[2]/div[2]/a[2]'
list_vis<-remDr$findElement("xpath",list_vis)
remDr$mouseMoveToLocation(webElement = list_vis)
remDr$click()
#-------------------------------------------------------
#Function:对检索到的信息进行爬取
#-------------------------------------------------------


#使用revest爬取信息
library(rvest)

info_list<-list(title<-'//p[@class="organic-gallery-title__content"]',
                price<-'//p[@class="gallery-offer-price"]')
ranges<-'//ul[contains(@class,"ma-ladder-price ma-ladder-price-count-")]/li'
detail_url_dir<-'//div[@class="organic-gallery-offer-section__title"]/h4/a'
input_num<-'//*[@id="root"]/div/div[3]/div/div[2]/input'
input_go<-'//*[@id="root"]/div/div[3]/div/div[2]/span[2]'
sub_dir_url='//a[contains(@class,"organic-gallery-title")]'
#current_url1<-remDr$getCurrentUrl()
remDr$navigate("https://www.alibaba.com/products/25mm_mink_eyelashes.html?spm=a2700.galleryofferlist.0.0.3615221bsbyKgv&IndexArea=product_en&viewtype=G")
detail_info_list<-list()
information_all<-list()
sub_dir<-c()
url_all<-list()
for (i in 1:100) {
  #输入页码进入网页
  input_num1<-remDr$findElement("xpath",input_num)
  input_num1$sendKeysToElement(list(as.character(i)))
  input_go1<-remDr$findElement("xpath",input_go)
  remDr$mouseMoveToLocation(webElement = input_go1)
  remDr$click()
  #页面滑动功能
  last_height = 0
  repeat {
    remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);", list(remDr$findElement("css","body")))
    Sys.sleep(1) 
    new_height=remDr$executeScript("return document.body.scrollHeight", list(remDr$findElement("css","body")))
    if(unlist(last_height) == unlist(new_height)) {break} else 
    {last_height = new_height} 
  }
  Sys.sleep(3)
  #解析网页
  web<-read_html(remDr$getPageSource()[[1]])
  print(i)
  information<-sapply(info_list,function(x){x=html_nodes(web,xpath = x);x=html_text(x,trim = T);return(x)},simplify = T)
  information_all[[i]]<-information
  names(information_all)[i]<-paste("page",i,sep = "")
  sub_dir1<-html_nodes(web,xpath = sub_dir_url)
  sub_dir1<-html_attr(sub_dir1,"href")
  sub_dir1<-paste("http:",sub_dir1,sep = "")
  sub_dir<-c(sub_dir,sub_dir1)
  url_all[[i]]<-remDr$getPageSource()[[1]]
  names(url_all)[[i]]<-paste("page",i,sep = "")
  #这里原本计划爬取每一个产品的细节信息,由于动态页面加载时间太长(网速太慢),故放弃
  # current_url<-remDr$getCurrentUrl()
  # detail_url<-html_nodes(web,xpath=detail_url_dir)
  # detail_url<-html_attr(detail_url,"href")
  # detail_url<-paste("http:",detail_url,sep = "")
  # detail_info_list[[i]]<-list()
  # names(detail_info_list)[[i]]<-paste("page",i,sep = "")
  # for (j in 1:length(detail_url)) {
  #   
  #   remDr$navigate(detail_url[j])
  #   Sys.sleep(10)
  #   web<-read_html(remDr$getPageSource()[[1]])
  #   detail_info<-html_nodes(web,xpath = ranges)
  #   detail_info<-html_text(detail_info,trim = T)
  #   if(length(detail_info)==0){
  #     detail_info="non_detected"
  #   }else{detail_info<-gsub("\n","",detail_info)}
  #   detail_info_list[[i]][[j]]<-detail_info
  #   names(detail_info_list[[i]])[j]<-remDr$getTitle()[[1]]
  #   print(j)
  # }
  # remDr$navigate(current_url[[1]])
  Sys.sleep(5)
  
  
  
}
#-------------------------------------------------------
#Function4:对结果进行整理及保存
#-------------------------------------------------------


information_all$page1[[1]]<-information_all$page1[[1]][-1]
information_all$page1
information_all$page1<-data.frame(title=information_all$page1[[1]],price=information_all$page1[[2]])

information<-data.frame()
for (i in 1:100) {
  information1<-information_all[[i]]
  information1<-as.data.frame(information1)
  colnames(information1)<-c("title","price")
  information<-rbind(information,information1)
}
information2<-str_split(as.character(information$price)," / ",simplify = T)
information$price<-information2[,1]
information$unit<-information2[,2]
information

information[,c(4,5)]<-str_split(as.character(information$price),"-",simplify = T)
information[1:6,1:5]
colnames(information)[c(4,5)]<-c("low","high")

information$url<-sub_dir
colnames(information)
information<-information[,c(1,4,5,3,6)]
head(information)
library(xlsx)
write.xlsx(information,"information.xlsx",row.names = F)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容