威尼斯人线上娱乐

1秒钟神速变动用于网页内容提取的xslt,python生成xml测试报告

25 3月 , 2019  

思路:

1分钟快捷变动用于网页内容提取的xslt,具体内容如下

Xml生成word总结

  
使用xml生成word的着力步骤在《使用xslt转化xml数据形成word文书档案导出.doc》中验证比较清楚了。然而中间的细节尚未说到,因而本人折腾了两日总算成功了。以下是自个儿在使用进程中遇到的标题要点:

 

1,项目背景

在Python即时互联网爬虫项目表达一文大家说过要做一个通用的互连网爬虫,而且能节约程序员大半的小时,而关键难点便是提取器使用的抓取规则必要赶快生成。在python使用xslt提取网页数据一文,大家曾经看到那几个提取规则是xslt程序,在示范程序中,直接把一长段xslt赋值给变量,然而并未讲这一段xslt是怎么来的。

网民肯定会猜忌:那些xslt这么长,编写不是要花不长日子?

实情是,那个xslt是因此GooSeeker的MS谋数台的直观标注功效自动生成的,熟识的话1分钟就消除了。

1.利用xslt样式,那样能够很好的和xml结合,做出特出的告诉

① 、项目背景

非得选用word 二〇〇二.

1.上面通过例子演示:

威尼斯人线上娱乐 1

威尼斯人线上娱乐 2

 

简简单单 的xml以及相应的xml框架

 

2.分头创立03本子的word文书档案log_03.doc和o7版本的word文档log_07.docx,并都采取以上生成的log.xsd框架

威尼斯人线上娱乐 3

 

独家另存为log_03_doc.xml,log_07_doc.xml。

3.
用log_03_doc.xml,log_07_doc.xml生成xslt文件log_03.xslt和log_07.xslt。

威尼斯人线上娱乐 4

 

log_03_doc.xml生成log_03.xslt时会弹出上述对话框,仅仅选中xml中钦定的namespace就能够了。

 威尼斯人线上娱乐 5

 

log_07_doc.xml生成log_07.xslt时会弹出上述对话框,正是没有xml中钦点的namespace,全体无论怎么选,生成的xslt都不是大家想要的。

2,MS谋数台能做哪些

MS谋数台有个图形化界面,把一层层html解析工具集成在同步,包含:
1)基于直观标注自动生成XSLT
2)即时测试XSLT的不错
3)树状的DOM结构展现
4)剖析某些DOM节点的习性
5)为DOM节点生成X帕特h,可挑选稳定到class、或然id、只怕相对定位
6)根据xpath搜索DOM节点

MS谋数台界面分成三有的:DOM数窗口、内嵌浏览器窗口、工作台。在工作台上定义xslt转换规则。

2.生成xml结构

在《Python即时网络爬虫项目表明》一文咱们说过要做三个通用的互连网爬虫,而且能节约程序员大半的年月,而难题难题正是提取器使用的抓取规则需求快速生成。在python使用xslt提取网页数据一文,大家已经观察那些提取规则是xslt程序,在示范程序中,直接把一长段xslt赋值给变量,可是并未讲这一段xslt是怎么来的。

不要选别的namespace

威尼斯人线上娱乐 6

log_03_doc.xml生成log_03.xslt时会弹出以上对话框,不要随便再选别的namespace。
生成的xslt截图

 

 威尼斯人线上娱乐 7

 

威尼斯人线上娱乐 8

倘诺再选中任何namespace,生成的xslt也不是我们要的。生成xslt截图

威尼斯人线上娱乐 9

人所共知跟上面的不相同。

1秒钟神速变动用于网页内容提取的xslt,python生成xml测试报告。 威尼斯人线上娱乐 10

 

 威尼斯人线上娱乐 11

 

 

 

3,用MS谋数台湾学生成XSLT

若果大家要抓取论坛帖子列表,上面一步步授课操作方法:

第一步,打开GooSeeker的MS谋数台,输入要抓取的网址
第二步,在MS谋数台的浏览器突显窗口里,直接选拔要提取的内容,并且起个名字,点击确认

威尼斯人线上娱乐 12

第三步,点击工作台的“测试”按钮,xslt就生成了,在“数据规则”窗口突显出来

威尼斯人线上娱乐 13

由此上述的操作,不用编程,用图形化界面直接在页面上标明,1秒钟就足以生成xslt

 

网民自然会嫌疑:那些xslt这么长,编写不是要花相当长日子?

安插图片

要贯彻插入图片,要求修改log_03.doc.

威尼斯人线上娱乐 14

再一次生成log_03.xslt,并修改<ns0:image>节点。

一 、删除全部v:shapetype 节点

贰 、删除 
<w:binData节点中的数据,并添加<xsl:value-ofselect=”.”/>

威尼斯人线上娱乐 15

修改之后

威尼斯人线上娱乐 16

3、修改v:shape 节点,去掉 style 属性,增加xsl 节点,如下:

威尼斯人线上娱乐 17

威尼斯人线上娱乐 18

 

④ 、去掉w:pict 节点前面的带<xsl:value-ofselect=”.”/>的富有节点

事例中去掉了之类代码:

<w:r>

         <w:t>

           <xsl:value-of select=”.” />

         </w:t>

  </w:r>

假若没做第⑥步,则在word中会出现图片的二进制代码。

 

 

例子:

  QDomDocumentdom;

    QDomProcessingInstructionproc =

       dom.createProcessingInstruction(

       “xml”,

       “version=\”1.0\”standalone=\”no\””

       );

    dom.appendChild(proc);

 

    QDomElementr =dom.createElement(“log”);

    dom.appendChild(r);

    r.setAttribute(“xmlns”,”logs”);

    QDomElementuserNode =dom.createElement(“user”);

    r.appendChild(userNode);

    QDomTextuserTextNode =dom.createTextNode(“john”);

    userNode.appendChild(userTextNode);

 

    QDomElementloginNode =dom.createElement(“login”);

    r.appendChild(loginNode);

    QDomTextloginTextNode =dom.createTextNode(“2015-01-1811:10:12”);

    loginNode.appendChild(loginTextNode);

 

    QDomElementlogoffNode =dom.createElement(“logoff”);

    r.appendChild(logoffNode);

    QDomTextlogoffTextNode =dom.createTextNode(“2015-01-1813:10:12”);

    logoffNode.appendChild(logoffTextNode);

 

    QDomElementimageNode =dom.createElement(“image”);

    r.appendChild(imageNode);

    QStringpng;

    FILE*fpng =fopen(“2.jpg”,”rb”);

    if( fpng )

    {

       encode(fpng,png,0 );

       fclose(fpng );

    }

    imageNode.setAttribute(“style”,”width:300pt;height:300pt” );

    charszBuffer[256];

    //sprintf(szBuffer,”wordml://5.png”);

    imageNode.setAttribute(“key”,”2.jpg” );

    QDomTextlogonNodeTextNode =dom.createTextNode(png);

    imageNode.appendChild(logonNodeTextNode);

 

 

 

    QStringxml =dom.toString();

    QFilefile(“log.xml”);

    if(file.open(QIODevice::WriteOnly))

    {

       QTextStreamoutput( &file);

       output.setCodec(QTextCodec::codecForName(“UTF-8”));

       //QStringcontent = dom.toString();

       output<< xml;

       file.close();

    }

 

 

    QStringsrc =”msxsl.exe”;

    QStringsrc1 =”log.xml”;

    QStringsrc2 =”log_03.xslt”;

    QStringsrc3 =QString(“122″)+”.doc”;

 

    QProcess*proce =newQProcess( );

    QStringListargumentList;

    argumentList.append(src1 );

    argumentList.append(src2 );

    argumentList.append(“-o”);

    argumentList.append(src3 );

 

    proce->start(src, argumentList );

    bool ret =proce->waitForStarted( 5000 );

 威尼斯人线上娱乐 19

4,怎么样利用XSLT

在python使用xslt提取网页数据一文,大家把生成xslt作为四个字符串交给程序,给人感到好像一转眼回到了东魏文明,前边讲的那么好,最终用了很原始的正片。其实不然,那三个只是贰个例子。在python即时互联网爬虫项目:
内容提取器的概念一文已经初见端倪了,有多种流入xslt的艺术,最自动化的艺术是api,将在此起彼伏文章中详细讲解。

xslt样式是个很风趣,也很强劲的,以往用的很多,很有益于就能做出1个非凡的告诉,能够百度时而,语法卓殊简单,跟写html大概的.

其实际情形形是,那些xslt是经过GooSeeker的MS谋数台的直观标注效用自动生成的,驾驭的话1分钟就解决了。

5,文书档案修改历史

二〇一四-05-26:V2.0,增加补充文字表明
二零一六-05-28:V3.0,扩充第三章

在那边能够定制好,我们要生成告诉,是何许体统的,然后在从xml获取数据.

② 、MS谋数台能做什么样

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <Head>
        <style type="text/css">

          body {
          background:#fff;
          margin:0;
          padding:40px 20px;
          font-family: "Arial", Arial, Sans-serif;
          font-size: 16px;
          color:#000;
          }

          table {
          margin:5px 5px 0;
          border:0px solid #222;
          font-size: 0.8em;
          }

          td {
          margin:5px 5px 0;
          padding:10px 10px 10px 10px;
          vertical-align:text-top;
          border:1px solid #222;
          border-width:1px 1px 1px 1px;
          }

          td.light {
          border:0px solid #222;
          }

          td.number {
          text-align:right;
          }

          td.status {
          text-align:right;
          vertical-align:text-bottom;
          }

        </style>


 </Head>
 <body>
   <!--OVER RESULT -->
   <xsl:variable name="OVER_STATUS" select="REPORT/OVER_STATUS"/>
   <xsl:variable name="STATUS" select="REPORT/LOG_ENTRY/STATUS"/>



   <h2>自动化测试执行报告</h2>
   <!--table -->
   <table border="1">
     <!--all result value-->
     <tr bgcolor="white" height = "35">
        <td>Overall Test Result</td>
        <td><xsl:value-of select="$OVER_STATUS"/></td>
        <td colspan="2"> </td>
     </tr>

     <tr bgcolor="#D8BFD8" height = "35">
       <th>执行时间</th>
       <th>单步结果</th>
       <th>响应CODE</th>
       <th>Response信息</th>
     </tr>



       <!--select font color -->
       <xsl:variable name="fontColor">
           <xsl:choose>
               <xsl:when test="$STATUS = FAILED or $STATUS = PASSED">
                   <xsl:text>white</xsl:text>
               </xsl:when>
               <xsl:otherwise>black</xsl:otherwise>
           </xsl:choose>
       </xsl:variable>

       <!--background color-->
       <xsl:variable name="backgroundColor">
           <xsl:choose>
               <xsl:when test="$STATUS = 'FAILED'">
                   <xsl:text>rgb(255,0,0)</xsl:text>
               </xsl:when>
               <xsl:when test="$STATUS = 'PASSED'">
                   <xsl:text>rgb(60,179,113)</xsl:text>
               </xsl:when>
               <xsl:otherwise>
                   <xsl:text>white</xsl:text>
               </xsl:otherwise>
           </xsl:choose>
       </xsl:variable>

       <!--log entry-->
       <xsl:for-each select = "REPORT/LOG_ENTRY">


           <tr>
               <td><xsl:value-of select="EXECUTION_TIME"/></td>
               <td bgcolor="{$backgroundColor}"><xsl:value-of select="STEP_RESULT"/></td>
               <td><xsl:value-of select="COMPONENT_NAME"/></td>
               <td><xsl:value-of select="STEP_DESCRIPTION"/></td>
           </tr>
       </xsl:for-each>

       <tr bgcolor="white">
           <font color="{$fontColor}">
               <td colspan="4">Overall Test Result:<xsl:value-of select="$OVER_STATUS"/></td>
           </font>
       </tr>
   </table>
 </body>
 </html>
</xsl:template>
</xsl:stylesheet>

MS谋数台有个图形化界面,把一种种html解析工具集成在联合署名,包蕴:

xml是要依据,xslt定制的组织进行转移,也许换句话说,xslt样式要遵守xml结构去做

  • 依照直观标注自动生成XSLT
  • 登时测试XSLT的没错
  • 树状的DOM结构体现
  • 浅析有些DOM节点的习性
  • 为DOM节点生成XPath,可选取稳定到class、大概id、或许相对定位
  • 根据xpath搜索DOM节点

xml结构

MS谋数台界面分成三有的:DOM数窗口、内嵌浏览器窗口、工作台。在工作台上定义xslt转换规则。

威尼斯人线上娱乐 ,REPORT/LOG_ENTRY

叁 、用MS谋数台生成XSLT

REPORT下OVER_STATUS节点,那几个是全体报告的结果,唯有当有着条条框框为passed时才会为passed

只要大家要抓取论坛帖子列表,下边一步步上课操作方法:
率先步,打开GooSeeker的MS谋数台,输入要抓取的网址
第3步,在MS谋数台的浏览器展现窗口里,直接选择要提取的剧情,并且起个名字,点击确认

每个LOG_ENTXC60Y节点,代表一行数据

威尼斯人线上娱乐 20

包括:

其三步,点击工作台的“测试”按钮,xslt就生成了,在“数据规则”窗口展现出来

STATUS单行数据实施情状

威尼斯人线上娱乐 21

EXECUTION_TIME执行时间

由此上述的操作,不用编制程序,用图形化界面直接在页面上标注,1分钟就足以生成xslt

STEP_RESULT单步执行结果

肆 、如何使用XSLT

COMPONENT_NAME组件名称,

在python使用xslt提取网页数据一文,咱们把生成xslt作为3个字符串交给程序,给人深感好像一转眼回来了史前文明,前边讲的那么好,最后用了很原始的正片。其实不然,这些只是四个事例。在《python即时互连网爬虫项目:
内容提取器的定义》一文已经初见端倪了,有各类流入xslt的情势,最自动化的方法是api,将在继续小说中详尽讲解。

STEP_DESC酷路泽IPTION步骤描述

伍 、文书档案修改历史

 

二〇一六-05-28:V3.0,扩张第2章
2015-05-26:V2.0,增加补充文字表达

本来那个都得以自已定义,能够本人增添或调整和减少,不过xslt表中也要相呼应的增多或裁减

以上正是本文的全体内容,希望对大家的就学抱有扶助,也期望大家多多帮衬脚本之家。

<?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet href="LOG.XSLT" type="text/xsl"?>
    <REPORT>
        <OVER_STATUS>PASSED</OVER_STATUS>
        <LOG_ENTRY>
            <STATUS>FAILED</STATUS>
            <EXECUTION_TIME>2017.06.15 15:57:16</EXECUTION_TIME>
            <STEP_RESULT>FAILED</STEP_RESULT>
            <COMPONENT_NAME>704</COMPONENT_NAME>
            <STEP_DESCRIPTION>{u'nextUrl': u'http://www.elong.com', u'message': u'\u9a8c\u8bc1\u7801\u9519\u8bef', u'code': u'704', u'success': False, u'isShowVerifyCode': True}</STEP_DESCRIPTION>
        </LOG_ENTRY>
        <LOG_ENTRY>
            <STATUS>FAILED</STATUS>
            <EXECUTION_TIME>2017.06.15 15:57:16</EXECUTION_TIME>
            <STEP_RESULT>FAILED</STEP_RESULT>
            <COMPONENT_NAME>704</COMPONENT_NAME>
            <STEP_DESCRIPTION>{u'nextUrl': u'http://www.elong.com', u'message': u'\u9a8c\u8bc1\u7801\u9519\u8bef', u'code': u'704', u'success': False, u'isShowVerifyCode': True}</STEP_DESCRIPTION>
        </LOG_ENTRY>
    </REPORT>

你或然感兴趣的稿子:

  • python使用xslt提取网页数据的法子
  • 运用Python下的XSLT
    API举办web开发的总结教程
  • 一个用xslt样式将xml解析为xhtml的类TransformBinder(兼容FF和IE7.0)
  • 用xslt将xml解析成xhtml的代码
  • XSLT轻松入门第③章:XSLT的实例
  • python提取字典key列表的艺术
  • Python完结从url中提取域名的三种形式
  • python利用正则表达式提取字符串
  • python使用正则表明式提取网页U途锐L的点子
  • Python进行多少提取的章程总计

 

上边上,生成xml的python代码,那么些创立xml结构就相当粗略了.

采用xml.dom.minidom就足以了,精通多少个要点很不难就创办二个xml

1,成立三个xml文书档案

import xml.dom.minidom as xmlDoc  #xmlDoc起的别名

xmldoc = xmlDoc.Document

 

2.因为我们要利用xslt样式,所以呢.

创设的xml第1行是xml头    <?xml version=”1.0″ encoding=”utf-8″?>
那样python暗中同意已经有了,就无须大家创制了,那么

第③行,大家要写样式头 <?xml-stylesheet href=”LOG.XSLT”
type=”text/xsl”?>   头中写了引用相同目录下的LOG.XSLT ,类型TEXT/XSL

要专注一点href属性不要写成这么D:\demo\LOG.XSLT
那样写会有标题,只要把这么些文件和xml放在同等目录就好了.

            #xml样式
            xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")
            xmlD.appendChild(xlstNode)

3.创办叁个REPOCRUISERT根节点,你也得以起名ROOT,叫什么名字看您自个儿了

成立节点用,createElement,之后用appendChild扩充节点到xml对象

            report = xmlD.createElement('REPORT')
            xmlD.appendChild(report)

4.之后成立别的节点,一样用createElement,但是要是节点下要增添内容要用xmlDoc.createTextNode(‘passed’)

以下代码意思是:创造1个over_status的节点,节点文本为passed,然后,将此节点扩大到根节点REPOSportageT下

            overStatus = xmlD.createElement('OVER_STATUS')
            overStatus.appendChild(xmlD.createTextNode('PASSED'))
            report.appendChild(overStatus)

 威尼斯人线上娱乐 22

有上述4点,基本创设一个xml没非凡了.

 

 

 生成xml具体python代码:

以下代码创制根节点做为了二个单身的函数,之所以这么做因为要转移的报告,只开创八个根节点,和over_status
结果意况

其余累加的行放在了节点LOG_ENTRubiconY下,2个根节点下能够有三个LOG_ENTRY节点……..一个LOG_ENT途胜Y节点代码一行数据实施结果

#*_*coding:utf-8*_*

import xml.dom.minidom as xmlDoc
import os
import gl
import sys



class cREPORTXML(object):
    def __init__(self):
        self.__struct = self.createReportNode()

    #创建report节点
    def createReportNode(self):
        try:
            xmlD = xmlDoc.Document()

            #xml样式
            xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")
            xmlD.appendChild(xlstNode)

            report = xmlD.createElement('REPORT')
            xmlD.appendChild(report)

            overStatus = xmlD.createElement('OVER_STATUS')
            overStatus.appendChild(xmlD.createTextNode('PASSED'))
            report.appendChild(overStatus)

            returnResult = []
            returnResult.append(xmlD)
            returnResult.append(report)
        except Exception,ex:
            return ex.message
        return returnResult


    def writeReport(self,execTime,stepResult,comName,stepDisc):
        #reportNodeList = self.createReportNode()

        entry = self.createLogEntry(self.__struct[0],execTime,stepResult,comName,stepDisc)
        self.__struct[1].appendChild(entry)
        self.writeXml(self.__struct[0],gl.reporterPath+'reportxml.xml')
        #self.writeXml(self.__struct[0],gl.reporterPath+'reportxml_%s.xml'%(gl.curTimeStr))
 #-------------创建xml格式-有多个相同的节点,并且该节点下有4个名称相同的子节点----------------
    def createLogEntry(self,docObj,executeTime,stepResult,componentName,stepDiscription):
        entry = docObj.createElement("LOG_ENTRY")

        status = docObj.createElement("STATUS")
        nodeExecuteTime = docObj.createElement("EXECUTION_TIME")
        nodeStepResult = docObj.createElement("STEP_RESULT")
        nodeComponentName = docObj.createElement("COMPONENT_NAME")
        nodeStepDiscription = docObj.createElement("STEP_DESCRIPTION")

        status.appendChild(docObj.createTextNode(stepResult))
        nodeExecuteTime.appendChild(docObj.createTextNode(executeTime))
        nodeStepResult.appendChild(docObj.createTextNode(stepResult))
        nodeComponentName.appendChild(docObj.createTextNode(componentName))
        nodeStepDiscription.appendChild(docObj.createTextNode(stepDiscription))

        entry.appendChild(status)
        entry.appendChild(nodeExecuteTime)
        entry.appendChild(nodeStepResult)
        entry.appendChild(nodeComponentName)
        entry.appendChild(nodeStepDiscription)
        return entry


    #参数,xml对象,准备存储xml文件路径,文件模式:读 and 写 (r and w)
    def writeXml(self,xmlDoc,xmlPath):
        f = open(xmlPath,"w")
        xmlDoc.writexml(f,indent='\t', addindent='\t', newl='\n', encoding="utf-8") #中间的加了一些格式符,这样生成的xml自动对齐格式
        f.close()




if __name__=='__main__':
    reportx =cREPORTXML()
    print  reportx.writeReport('20170602','PASSED','1-SETTEXT','AUTOMATION TEST')
    print  reportx.writeReport('20170606','FIELD','2-SETTEXT','AUTOMATION TEST')

 

 用ie打开xml报告,当然能够阅览计算果呈现有点难题,那一个不影响报告呈现,代码中拍卖一下就好.

简短的告知就完了了,追求弹无虚发的能够在细化一下,增加部分任何音信,调整一下颜色.

威尼斯人线上娱乐 23

 


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图