美文网首页
第一个爬虫

第一个爬虫

作者: yyyllleon | 来源:发表于2019-01-11 15:57 被阅读0次

    with rvest 包

    爬取梧桐果网页关于企业的行业分类信息

    输入:企业名

    输出:企业行业分类

    1.基本信息

    任务描述:给200家公司做行业分类,200家公司的名字存在.csv文件中

    逻辑:在红框处依次输入公司名,再截取其分类信息

    网页描述:基本url: http://www.wutongguo.com/industry/?txtCompany=

    红框处输入“公司名”

    2.观察规律

    红框处输入公司名(eg:中国建筑),url相应变化为

    ,第一层次网页,“中国建筑”搜索页面

    新url中,%D6%D0%B9%FA%BD%A8%D6%FE 为“中国建筑”的gbk转码而非utf-8转码

    注意:gbk转码与utf-8转码结果十分相似,不要搞混

    3.进一步深入

    此时发现网页中仍然没有相应的行业分类信息,需要进一步点击“中国建筑”处的链接

    结果如下,出现了待爬信息:“所属行业:建筑/建材/工程”

    第二层次网页,公司主页

    4.具体过程

    a.转码与第一级url列表

    描述:

    将.csv文件中储存的公司名字转换成gbk编码,以将该编码与base_url “http://www.wutongguo.com/industry/?txtCompany=”组合,形成待访问网页列表uurl_1,其中该urrl_1是一个数组,每一个cell储存一个公司名称所对应的第一层次搜索结果页的url。

    实现:

    本来准备用RCurl::curlEscape()函数来实现汉字的转码,但该函数只能实现utf-8转码。也即url地址中包含中文时,可以用该函数转码,否则不能。实际上用了一个网站http://www.atool.org/urlencode.php 来进行汉字到gbk的转码。并且只能一次性复制粘贴全部公司名称进行转换,得到全部公司名的gbk转码,以%0D%0A(换行符的gbk转码)。于是需要首先将得到的全部转码存为.txt文件,再导入R存为gbk对象,并用unlist(strsplit(char object,分隔符,fixed=T/F))的函数组合进行分割。注意strsplit只接受character对象进行分割,故需要将读入的.txt文件转化为character类型对象。代码如下:

    gbk <- read.table("C:/Users/LEON/Desktop/gbk.txt", quote="\"", comment.char="")

    gbk<-as.character(gbk[1,1])

    gbk_list<-unlist(strsplit(gbk, "%0D%0A", fixed = TRUE))

    uurl_1列表的构造用paste()函数实现。paste(a,b,c,...,sep="sep char")。a、b、c等对象为待拼接对象,sep为分隔符,若无缝连接,应设为“”。代码如下

    base_url<-"http://www.wutongguo.com/industry/?txtCompany="

    uurl_1<-paste(base_url,gbk_list,sep = "")

    b.开始爬虫及rvest结构

    逻辑与结构

    html

    首先read_html(网页地址url,编码方式encoding=“”)读取该网页全部内容,并将其储存为一个XML类型对象,命名为wweb

    node

    其次html_node(wweb,css or xpath)从该XML对象(储存该网页全部信息)选取一个特定node类型对象,而我们想要爬取的对象就储存在该node对象中exactly。

    那么问题来了,怎么才能知道所需信息所属的node名。我们使用selectorgadget在线chrome拓展工具即可知道

    得到待爬取信息的node名

    我们需要的其二级链接的信息就保存在这个名为.insutryName的node里面。接着查看该node的结构以确定二级url的在该node的哪个位置。

    可发现该url存在href中

    attributes

    通过html_attr(node,attr_name)来得到该node的特定attributes

    再将得到的二级url与其base url拼接,得到新的二级url列表uurl_2

    实现代码如下:

    uurl_2<-array(NA,200)

    for (i in 1:1) {

    wweb_1<-read_html(uurl_1[i],encoding = "GB18030")

    node_1<-html_node(wweb_1,".industryName")

    uurl_2[i]<-html_attr(node_1,name = 'href')

    uurl_2[i]<-paste("http://www.wutongguo.com",as.character(uurl_2[i]),sep = "")

    html_text

    html_text可以截取node中的text信息,不需要知道其具体位置

    以此实现第二层爬虫,逻辑类似,代码如下:

    Ind_list<-array(NA,200)

    for (i in 100:200) {

    if(uurl_2[i]!='http://www.wutongguo.comNA'){

    wweb_2<-read_html(uurl_2[i],encoding = "GB18030")

    node_2<-html_node(wweb_2,".brandInd")

    Ind_list[i]<-html_text(node_2) }}

    当没有搜索结果相匹配时,uurl_2[i]包括NA,该url无效,应避免访问以免程序报错

    相关文章

      网友评论

          本文标题:第一个爬虫

          本文链接:https://www.haomeiwen.com/subject/byqxdqtx.html