一份新手友好的R语言爬虫教程

Chrome开发工具

2019-06-03 11.31.42.gif

对网页进行刷新

image.png

Accept

可以接收信息的格式

User-agent

User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。UA可以进行伪装。
浏览器的UA字串的标准格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识版本信息。但各个浏览器有所不同。

Cookie*

但在计算机语言中,Cookie指的是当你浏览某网站时,网站存储在你电脑上的一个小文本文件,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。它记录了你的用户ID,密码、浏览过的网页、停留的时间等信息,用于用户身份的辨别。Cookie通常是以user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。

Referer

跳转之前的链接(反爬)

状态码

1xx提示信息- 表示请求已被成功接收,继续处理

2xx成功。表示请求已被成功接收,理解,接收

3xx重定向-要完成请求必须进行更进一步的处理

4xx客户端错误-请求有语法错误或者请求无法实现

5xx服务器端错误-服务器未能实现合法的请求

爬虫利器SelectorGadget

SelectorGadget是一个Google的扩展程序,它的作用就是可以帮助你快速提取指定目标的xpath,并且操作十分方便,下面我来给大家展示一下如何使用。

如何下载

下载地址

百度网盘

如何安装

1.找到chrome的扩展程序
5c284e5cc1972

注意开发者模式已经打开

2.将下载后的插件程序 拖拽到扩展程序页面,就会提示安装,按照指示操作即可

爬取新浪财经个股点评

需要的程序包

rvest

坦白的说,rvest的确是一个很好地数据抓取工具,不过他的强项更多在于网页解析,你可能惊艳于rvest强大的解析能力,有两套解析语法可选(Xpath、css),短短几个关键词路径就可以提取出来很重要的数据。
网络爬虫是讲呈现在网页上以非结构格式(html)存储的数据转化为结构化数据的技术,该技术非常简单易用。

rvest是R用户使用率最多的爬虫包,它简洁的语法可以解决大部分的爬虫问题。

xml2

读取HTML和XML格式数据。

第一次使用要安装程序包
install.package('rvest','xml2')

读取网页

1.以新浪财经为例:

image
library('rvest')
library('xml2')
url<-paste('http://finance.sina.com.cn/roll/index.d.html?cid=56589&page=1') #指定url

2.在网页空白处右键点击“查看网页源码”(本教程使用chrome),结果如下:

image
webpage<-read_html(url,encoding = 'utf-8') #在源码中搜索“charset”查找该网页编码方式

选取目标页面元素

1.利用SelectorGadget 选取目标页面元素,黄色为选中,SelectorGadget下载和安装

2.去到误选,再次单击即可,结果如下:

image
image
news_html<-html_nodes(webpage,'.list_009 a')

提取指定元素中的文本

news<-html_text(news_html)head(news)    #查看前6行

存储结果

news<-write.csv(news,file=paste("C:/Users/Administrator/Desktop/news.csv"))

getwd()

爬取今日特价

  • Rcurl完成网站的访问
  • XML通过HTML树结构筛选提取信息
library(RCurl)
library(XML)

什么要反爬虫

会有人不断的发起请求获取数据,动态服务器会有大量的异常错误/正常的意外流量,如果不反,流量被浪费在了(程序员/组织)获取数据上而不是分发(到用户)数据上能够正常获取数据后爬虫的消耗(相对正常用户)很大。
我们为了顺利完成爬虫任务,我们需要对爬虫身份进行伪装:

myheader<-c(
  
  "User-Agent"="Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 ",
  
  "Accept-Language"="en-us",
  
  "Connection"="keep-alive",
  
  "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")#伪装header,防止不能爬取

getURL()

用于发送请求

temp<-getURL("http://tejia.aili.com/",httpheader=myheader,encoding="UTF-8")#获取链接

htmlParse()

对网页进行解析

k=htmlParse(temp,encoding="UTF-8")#解析
k

getNodeSet()

对需要爬取的元素进行定位
getNodeSet(doc, path...)
doc 就是html树文件对象,path 就是元素路径。可以用/从根元素一层层指定路径,也可以用//直接定位到某一层元素。
下面的元素路径由SelectorGadget进行获取。

youhui=sapply(getNodeSet(k,'//*[contains(concat( " ", @class, " " ), concat( " ", "indx_li", " " ))]//span'),xmlValue)
#其中sapply函数则是为了将xmlvalue类型的数据集合转化为R语言中常见的向量形式
write.table(youhui,"youhui.txt")#将结果保存

今日特价爬虫加强版

仅仅伪装一个身份怎么够神秘,利用sample()对设备信息进行轮换。

UserAgent=c(
  "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36",
  "Mozilla/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",
  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68",
  "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",
  "Opera/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto/2.12.388 Version/12.16",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68",
  "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/30.0.1599.12 Mobile/11A465 Safari/8536.25",
  "Mozilla/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4",
  "Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53",
  "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",    
  "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"
)
n=length(UserAgent)
myheader<-c(
  "User-Agent"=UserAgent[sample(n-1,1)],#随机选择
  "Accept-Language"="en-us",
  "Connection"="keep-alive",
  "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")

通过写循环爬取多页,为了减缓服务器的负担,利用Sys.sleep(5),运行前睡眠5秒。

urllist=0
page=1:3
urllist[page]=paste("http://tejia.aili.com/index_",page,".html",sep='')
for(url in urllist){
  temp<-getURL(url,encoding="utf-8",httpheader=myheader)#
  k=htmlParse(temp,asText=T,encoding="utf-8")
  review=sapply(getNodeSet(k,'//*[contains(concat( " ", @class, " " ), concat( " ", "indx_li", " " ))]//span'),xmlValue)
  review[page]
  cat(url,"\n")
  write.table(review,"/Users/song/Desktop/yohui.txt",quote = FALSE,row.names = TRUE,
              col.names = FALSE,append=T)
  Sys.sleep(5)#睡眠5秒
}

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