爬虫心得(三)

21 篇文章 0 订阅
16 篇文章 1 订阅

说完以上这些,就到了修改xml模板的环节了。

目录

一     2种模板的作用

二     app模板的配置

三:template.xml的配置


xml模板的作用

一     2种模板的作用

1.app.xml 是用来配置采集的频道的信息。内容包括频道名称,请求链接,请求方式,请求头等。

2.对返回的新闻列表和返回的详情页的处理。

TemplateParser是模板解析器,会解析模板里的规则。AppCrawler是一个抽象类,具有一个解析器对象,在AppCrawler类里,解析出的规则会被赋值给对应的变量,requestList是请求新闻列表方法,会用到模板规则里的链接。

模板规则解析这部分暂时不会涉及到。

3.要做的就是继承AppCrawler类,根据需要重写requestList,requestDetail,processArticle这三个方法。

4.程序启动后会先解析模板

模板的作用相当于是 数据的初始化。

举个例子: 频道对应的变量就是appChannelInfo


二     app模板的配置

1.app.xml该文件名规定不许更改。其余模板名称可以更改

2.每个频道的http请求都需要配置

3.需要说明一下,在http请求的标签中 heder标签中的key为请求头的名称,value则为相应的值

<http method="GET">

<header key="" value="" />

</http>

4.template.xml文件的配置,在这里先提一下,因为在app.xml的模板中,每个频道最后都要解析到下一级模板中。解析的顺序和源码中编写顺序一致。

5.配置时的详细问题

pageNo=${变量名}

<变量名 from="1" to="3" increment="1" />

6.其余元素名称意义如下表

元素名称

说明

备注

app

配置文件根元素。一个app中可以有多个channel。

 

site

app的站点信息,包含siteName、logo以及app的pc网址。

CDATA中保存着站点网址信息。

siteName必须保持唯一

channel

app的频道信息,包含channelName,以及采集方式、抽取模板等信息。

CDATA中保存着频道的网址信息。

channelName必须保持唯一;

频道网址信息必须存在确切确。

listPage

频道列表页翻页配置

 

next

翻页时,url中的参数变化范围。从from值,以increment值为步进,增加到to值。

max值是最大翻页次数,如果达到此值无条件停止翻页。

 

http

请求发送方式

get和post不区分大小写

header

自定义的http header,key为header名称,value为header值

此值是固定的,每次请求都会有此信息

template

频道信息抽取模板,name可以随便写,parent中写模板的相对于app.xml文件的路径。

一个channel可以有多个template

parent如果不为空,则其指定的抽取模板必须存在

 

将app.xml文件配置代码列出:

<app>
    <!-- 站点信息,webSiteId会根据siteName计算,因此siteName要保持唯一性 -->
    <!-- 站名命名规则 xxxx-手机客户端 -->
    <site siteName="云南通-手机客户端" logo="browse/images/beijingTime.png" ignore="false">
        <![CDATA[ http://apiparty.xinhuaapp.com ]]>
    </site>
    <!-- 频道信息,channelId会根据channelName计算。如果一个频道有多个列表入口页,可配置多个channel,保持channelName相同即可 -->
    <!-- 可用ignore属性控制某个频道是否需要被采集 -->
    <channel channelName="推荐" ignore="false">
        <![CDATA[ https://apiparty.xinhuaapp.com/Service/IndexSvr.svc/GetIndexPage?modilarId=115228&pageNo=${cstart}&styleId=340&appId=136&appKey=d0779&projectId=1   ]]>
        <!-- 列表翻页配置信息 -->
        <listPage>
            <!-- 翻页配置信息,元素名称为url中需要变换的参数,其值必须为数字 -->
            <next max="3">
                <cstart from="1" to="3" increment="1" />

            </next>
            <!-- http请求配置信息,method值为get或post,大小写无关 -->
            <http method="GET">
                <header key="token"
                    value="aee38189576a7179b817d5d979204af02832fe36ebed8347bbce21c74e7cba870fd561667a8602f3dfa43af324c1dd2938a8a37615f86d84ce84f0af13b0de811560132750312" />
                <header key="random" value="999" />
            </http>
        </listPage>

        <!-- 抓取的模板信息,name随便写,可继承parent路径模板的所有配置 -->
        <template parent="/template2.xml" />
        <template parent="/template22.xml" />
    </channel>


</app>

三:template.xml的配置

将postman获取的json,使用jsonpath和xpath,进行数据定位。

一般来讲,能够采集的都采集上.

标题 作者 来源 时间 正文 图片链接 摘要

jsonpath教程:https://blog.csdn.net/myself8202/article/details/80724968

xpath教程: https://blog.csdn.net/u013332124/article/details/80621638

jsonpath校验地址:http://jsonpath.com/

示例配置代码如下:


<?xml version="1.0" encoding="utf-8"?>
<!-- 模板信息,name随便写。可继承parent路径模板的所有配置。parent为空时,忽略 -->
<template parent=""
    processor="com.公司.newsappcrawler.apps.yunnantong.YunnantongCrawler">
    <!-- 列表页信息提取模板配置 -->
    <list type="json">
        <![CDATA[ $.Data.IndexContent[*]]]>
        <articleUrl type="json">
            <![CDATA[ $.Id ]]>
        </articleUrl>
        <title type="json">
            <![CDATA[ $.Title ]]>
        </title>
        <source type="json">
            <![CDATA[ $.Source ]]>
        </source>

        <abstractText type="json">
            <![CDATA[ $.summary ]]>
        </abstractText>


        <commentCount type="json"> 
            <![CDATA[ $.comment_count ]]>
        </commentCount>


        <commentUrl type="default"> 
            <![CDATA[ null ]]>
        </commentUrl>


        <imageUrls type="json">
            <![CDATA[ $.ImgUrls ]]>
        </imageUrls>
        <tag type="json" format="">
            <![CDATA[ $.Tags ]]>
        </tag>

    </list>
    <!-- 详情页信息提取模板配置 -->
    <article type="json">
        <![CDATA[ $.Data.Detail ]]>

        <detailUrl type='json'>
         <![CDATA[ $.DetailUrl]]>
        </detailUrl>
        <source type="html">
            <![CDATA[ //span[@class='source']/text()]]>
        </source>
        <publishTime type="json" format="yyyy-MM-dd HH:mm:ss">
            <![CDATA[  $.IssueTime ]]>
        </publishTime>
    </article>
    <!-- 评论页信息提取模板配置,评论页只有列表页 -->
    <comment type="json">
    </comment>
</template>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值