R语言读取淘宝的单品页的名称和价格

  1. #lab1
    html

  2. library(XML);
    node

  3. url1<-"http://data.caixin.com/macro/macro_indicator_more.html?id=F0001&cpage=2&pageSize=30&url=macro_indicator_more.html#top";
    json

  4. url<-htmlParse(url1,encoding="UTF-8")#把html文件读入r语言中并解析
    网页爬虫


  5. #找结点
    网络

  6. test <- getNodeSet(url,'//meta[@name]')#xpath语法找到html部件#显示的中文正常
    app

  7. #读取结点的内容:xmlValue内部参数只能是一个字符串
    ide

  8. test_text_list<-sapply(test, xmlValue)#提取内容,多个的化以向量形式存储
    函数

  9. test_text<-xmlValue(test`2`)#把test的第2个中的内容提取出来=test_text_list[2].注意,即时test只有一组数据也要使用test`1`,不能够直接使用test(不是字符串)
    测试

  10. #读取结点的属性:xmlGetAttr内部参数只能是一个字符串
    网站

  11. content1<-xmlGetAttr(test`1`, "content")#读取test`1`中的content内容。注意直接用test不能够。#显示的中文不正常

  12. content1<-iconv(content1,"UTF-8","gbk")#解决中文正常显示问题



  13. #lab2使用R语言爬取淘宝网站的笔记本商品价格和名称

  14. library(XML);

  15. url1<-"http://3c.taobao.com/detail.htm?spm=872.217037.254698.6.deIiSJ&spuid=205341228&cat=1101"

  16. url2<-"http://3c.taobao.com/detail.htm?spm=872.217037.254698.11.deIiSJ&spuid=203228104&cat=1101"

  17. read_taobao<-function(url){

  18.     name_text<-""

  19.     price_text<-""

  20.     i<-1

  21.     for(i_url in url){

  22.         i_url2<-htmlParse(i_url,encoding="UTF-8")#读取html数据

  23.         name<- getNodeSet(i_url2,"//div[@id='idetail']//div[@class='info-area']//div[@class='tlt clearfix']//h1")#经过xpath找到网页中的name

  24.         #xpath://任意位置的  @是属性

  25.         name_text_tmp<-xmlValue(name`1`)#提取name的内容

  26.         price<-getNodeSet(i_url2,"//div[@id='idetail']//div[@class='info-area']//div[@class='key-info']//span[@class='price']")#经过xpath找到网页中的price

  27.         price_text_tmp<-xmlValue(price`1`)#提取price的内容

  28.         name_text[i]<-name_text_tmp

  29.         price_text[i]<-price_text_tmp

  30.         i<-i+1

  31.     }

  32.     data.frame(name=name_text,price=price_text)

  33. }

  34. url<-c(url1,url2)

  35. read_taobao(url)

复制代码

http://www.bassary.com/?p=1107

  1. #*************网页爬虫-R语言实现,函数库文件*******#

  2. #****做者:oldlee11***************************************#

  3. #****版本:v0.1*******************************************#

  4. #****时间:2012-11-14*************************************#

  5. library(XML);

  6. #****函数:(crawler1)

  7. #****概要:网络抓取的主要函数1,能够抓取n个网页的m个变量。每一个xpath只爬取一个数据,若是大于1个则提示有误。(精确抓取)

  8. #****输入:

  9. #        名称           |    数据格式

  10. #        url            |    欲抓取的网站的url                向量:n个

  11. #        xpath          |    给出的抓取变量的xpath            向量:m个

  12. #        content        |    变量是结点的内容仍是结点的属性值 向量:m个  

  13. #                            "text"是内容(默认),或者是属性名称

  14. #****输出:只有print,无输出

  15. #        名称           |    含义


  16. crawler1<-function(url,xpath,content=rep("text",length(xpath))){

  17.     #若是xpath以及content的数量不一样,则输入数据有误

  18.     num_url<-length(url)

  19.     if(length(content)!=length(xpath)){

  20.         print("Error:content和xpath向量的数量不一致!")

  21.         return

  22.     } 


  23.     #创建一个num_url行,num_vari列的数据框

  24.     num_vari<-length(xpath)

  25.     result<-data.frame(rep(0,num_url))

  26.     for(i in 2:num_vari){

  27.         cbind(result,rep(0,num_url))

  28.     }

  29.      

  30.     #遍历url向量,依次对相应网页进行抓取

  31.     i<-1

  32.     j<-1

  33.     for(i_url in url){

  34.         i_url_parse<-htmlParse(i_url,encoding="UTF-8")#读取url网页数据,并使用htmlParse转化。(xml文件使用xmlParse)

  35.         for(j in 1:num_vari){#依次填充一个页面中的不一样欲读取的数据值

  36.             node<-getNodeSet(i_url_parse,xpath[j])#经过xpath[i]找到相应变量的xpath结点

  37.             if(length(node)==0){#未爬取到数据,说明xpath有误

  38.                 result[i,j]<-NA

  39.                 print(paste("注意:第",j,"个变量未能在第",i,"个页面中找到,咱们会把该数据写为空值"))

  40.             }else if(length(node)==1){#爬取到一个数据,说明正常

  41.                 if(content[j]=="text"){#欲爬取变量的内容

  42.                     result[i,j]<-xmlValue(node`1`)

  43.                 }else{#欲爬取变量的属性

  44.                     result[i,j]<-xmlGetAttr(node`1`,content[j])

  45.                     result[i,j]<-iconv(result[i,j],"UTF-8","gbk")#若是是乱码,能够打开此语句。若是是na能够删除此句

  46.                 }

  47.             }else{#爬取到多个数据,本函数不予处理

  48.                 result[i,j]<-NA

  49.                 print(paste("注意:第",j,"个变量能在第",i,"个页面中找到多个,不知您要哪个,咱们会把该数据写为空值"))    

  50.             }

  51.         }

  52.         i<-i+1

  53.     }

  54.     result

  55. }


  56. #****函数:(crawler2)

  57. #****概要:网络抓取的主要函数2,能够抓取n个网页的1个变量。该xpath能够爬取多个数据,(批量抓取)

  58. #****输入:

  59. #        名称           |    数据格式

  60. #        url            |    欲抓取的网站的url                向量:n个

  61. #        xpath          |    给出的抓取变量的xpath            向量:1个

  62. #        content        |    变量是结点的内容仍是结点的属性值 向量:1个  

  63. #                            "text"是内容(默认),或者是属性名称

  64. #****输出:只有print,无输出

  65. #        名称           |    含义

  66. #        url            |    1---n天然数,相同url拥有相同数值

  67. #        vari           |    读取的数据

  68. crawler2<-function(url,xpath,content="text"){

  69.     num_url<-length(url)

  70.     result<-data.frame(url=0,vari=0)

  71.     i<-1#记录第几个url

  72.     tmp<-1#

  73.     for(i_url in url){

  74.         i_url_parse<-htmlParse(i_url,encoding="UTF-8")#读取url网页数据,并使用htmlParse转化。(xml文件使用xmlParse)

  75.         node<-getNodeSet(i_url_parse,xpath)#经过xpath[i]找到相应变量的xpath结点

  76.         if(length(node)==0){#未爬取到数据,说明xpath有误

  77.             result[tmp,1]<-i

  78.             result[tmp,2]<-NA

  79.             print(paste("注意:变量未能在第",i,"个页面中找到,咱们会把该数据写为空值"))

  80.             tmp<-tmp+1

  81.         }else{

  82.             for(j in 1:length(node)){

  83.                 result[tmp,1]<-i

  84.                 if(content=="text"){#欲爬取变量的内容

  85.                     result[tmp,2]<-xmlValue(node`j`)

  86.                 }else{#欲爬取变量的属性

  87.                     result[tmp,2]<-xmlGetAttr(node`j`,content)

  88.                     #result[tmp,2]<-iconv(result[tmp,2],"UTF-8","gbk")#若是是乱码,能够打开此语句。若是是na能够删除此句

  89.                 }

  90.                 tmp<-tmp+1

  91.             }

  92.         }

  93.         i<-i+1

  94.     }

  95.     result

  96. }


  97. #test


  98. #测试crawler1

  99. #测试内容

  100. url1<-"http://3c.taobao.com/detail.htm?spm=872.217037.254698.6.deIiSJ&spuid=205341228&cat=1101"

  101. url2<-"http://3c.taobao.com/detail.htm?spm=872.217037.254698.11.deIiSJ&spuid=203228104&cat=1101"

  102. url3<-"http://item.taobao.com/item.htm?spm=1020.3.9.122.SCNhDn&id=15695321398&from="

  103. url<-c(url1,url2,url3)

  104. xpath<-c("//div[@id='idetail']//div[@class='info-area']//div[@class='tlt clearfix']//h1","//div[@id='idetail']//div[@class='info-area']//div[@class='key-info']//span[@class='price']")

  105. crawler1(url,xpath)

  106. #测试属性值

  107. url<-"http://data.caixin.com/macro/macro_indicator_more.html?id=F0001&cpage=2&pageSize=30&url=macro_indicator_more.html#top";

  108. xpath<-"//meta[@name='keywords']"

  109. content<-"content"

  110. crawler1(url,xpath,content)


  111. #测试crawler2

  112. url<-"http://list.taobao.com/itemlist/bao.htm?spm=567.116925.155171.105.9ZYYMX&cat=50072693&isprepay=1&viewIndex=1&yp4p_page=0&commend=all&atype=b&style=grid&olu=yes&isnew=2&smc=1&mSelect=false&user_type=0&fl=50072693#!cat=50072693&isprepay=1&user_type=0&as=0&viewIndex=1&yp4p_page=0&commend=all&atype=b&style=grid&olu=yes&isnew=2&mSelect=false&smc=1&json=on&tid=0"

  113. xpath<-"//li[@class='list-item list-item-grid']"

  114. content<-"data-commenturl"

  115. crawler2(url1,xpath,content)

  116. #疑难:如何破解data-commenturl="`item`.`commendHref`" 

  117. #<li class="list-item list-item-grid" data-isrush="`item`.`isLimitPromotion`" data-ismall="`item`.`isMall`" data-item="`item`.`itemId`" data-#params="sellerId=`item`.`sellerId`&ip=`extraInfo`.`userIp`" data-comment="`item`.`commend`" data-commenturl="`item`.`commendHref`" data-#virtual="`item`.`isVirtual`">


  118. url2<-"D://r//lab//网页爬虫//data//bao.htm"

  119. crawler2(url2,xpath,content)

相关文章
相关标签/搜索