zoukankan      html  css  js  c++  java
  • 网络爬虫速成指南(二)网页解析(基于模板)

    网页解析技术:
    1 xpath教程
    2 正则表达式教程

    xpath是将html加载为DOM树解析,简单,易维护。
    通常我用正则作为辅助抽取,用xpath定位后,再从定位的数据中用正则抽取。

    xpath的类库:
    .net 方向主要用到HtmlAgilityPack
    java 方向主要用到HtmlCleaner(得翻墙) jsoup

    以下是本人封装好的:HtmlParser
    使用示例:
                HtmlParser<HotelInfo> parser = new HtmlParser<HotelInfo>();
                ParseConfig config = new ParseConfig("save_xc.xml");
                String html = File.ReadAllText("xiecheng.txt", Encoding.GetEncoding("GBK"));
                HotelInfo entity = parser.GetEntity(html, config);

     模板样例1:

    <?xml version="1.0" encoding="utf-8"?>
    <template>
        <page>
            <save root=".">
                <field>
                    <name>Title</name>
                    <xpath>//div[@id='J_Article_Wrap']//h1</xpath>
                </field>
                <field>
                    <name>PubTime</name>
                    <xpath>//*[@id='pub_date']</xpath>
                    <regex>
                        <pattern>(d+)年(d+)月(d+)日</pattern>
                        <format>{0}-{1}-{2}</format>
                    </regex>
                </field>
                <field>
                    <name>Article</name>
                    <xpath>//*[@id="artibody"]</xpath>
                </field>
            </save>
        </page>
    </template>
    模板样例2:

    <?xml version="1.0" encoding="utf-8"?>
    <template>
        <page>
            <save_m root="//tr[@id]">
                <field>
                    <name>Price</name>
                    <xpath>./td[@class='price']</xpath>
                </field>
            </save_m>
        </page>
    </template>

    模板样例3:

    <?xml version="1.0" encoding="utf-8"?>
    <template>
        <page>
            <save root=".">
                <field>
                    <name>Name</name>
                    <xpath>//h1</xpath>
                </field>
                <field>
                    <name>EngName</name>
                    <xpath>//div[@class='name']/h2</xpath>
                </field>
                <field>
                    <name>Star</name>
                    <xpath>//div[@class='grade']/span/@title</xpath>
                </field>
                <field>
                    <name>Address</name>
                    <xpath>//div[@class='adress']</xpath>
                </field>
                <field>
                    <name>Description</name>
                    <xpath>//*[@id="htlDes"]</xpath>
                </field>
                <field>
                    <name>Facility</name>
                    <xpath position='outerhtml'>//div[@class="htl_info_table "]</xpath>
                </field>
                <field>
                    <name>Policy</name>
                    <xpath  position='outerhtml'>//div[@class='detail_main']/div[@class="htl_info_table"]</xpath>
                </field>
                <field>
                    <name>Traffic</name>
                    <xpath  position='outerhtml'>//div[@class='transSub'][1]/div[@class="htl_info_table"]</xpath>
                </field>
                <field>
                    <name>Nearby</name>
                    <xpath  position='outerhtml'>//div[@class='transSub'][2]/div[@class="htl_info_table"]</xpath>
                </field>
            </save>
        </page>
    </template>

  • 相关阅读:
    [SDOI2015]约数个数和
    [POI2007]ZAP-Queries
    fpu栈溢出
    shader 汇编
    sample a texture as a rendertarget
    ID3d11asynchronous
    DEVICE DRAW VERTEX BUFFER TOO SMALL
    模型的一个点显示在原点
    setrendertraget 上下颠倒
    skinned mesh 蜘蛛样
  • 原文地址:https://www.cnblogs.com/i80386/p/3259197.html
Copyright © 2011-2022 走看看