web-harvest 探索之旅之自定义变量的自增
来源:互联网 发布:淘宝拍摄产品多少钱 编辑:程序博客网 时间:2024/05/22 04:50
在用web-harvest从网上抓取数据的时候难免会遇到一些由于标签书写不规范等原因导致抓下来的数据格式跟我们想要的不一样的情况。(注:HTML本来就是一种语法要求不是很严格,写起来比较随意的语言)
例如:我们知道在从网页抓取数据的时候按照某一个标签得到的数据会放到一个list里面,如图:
我们以list格式查看变量的值(除此之外还可以以txt、XML、HTML等格式查看变量的值),我们发现其中有许多空白项(经观察发现空白项是单独一个换行造成的),按照我们的初衷是想得到这样的值:在list里面按照论文题目-作者、题目-作者、题目-作者……这样的顺序存放在list里面。而现在因为一些原因导致出现了空白项,这样就不能够按照index的奇偶来顺序的将论文题目和作者一一得到。
在遇到这个问题的时候,我尝试了许多方法,例如,将list里的内容用toString()方法转成字符串然后用replace()方法替换掉其中的换行,但是发现在这样转换之后原本的多个数据项全部成为了一项,这比原来的结果还要糟糕。此外,我还尝试了用XQuery中translate()等方法依然无法达到想要的效果,这里不得不说网上关于web-harvest、xpath等资源实在是太少了,也不知是我搜索的方法不对,至少我没有在网上找到解决办法,当我想用最笨的办法用script去提取想要的内容时,突然想到一个方法,为何不可以在循环外面再定义一个变量,当抽取到有效数据的同时该变量随着自增,当读取到空白项时,该变量的值不变,这种方法是很容易想到的,如果用C、C++或者JAVA都很容易实现,但是因对XML不是很熟悉所以刚一开始不知道如何让一个变量的值循环递增,后来摸索着,终于找到了一种方法:
<!-- 定义一个变量,名字为j-->
<var-def name="j">1</var-def>
<!--重点来了!这个地方看上去是重定义变量j,但是要注意的是var-def 里overwrite属性可是不能写成false,不然就完蛋了。如果写成false那就意味着遇到同名字的变量原来变量的值不覆盖,这样的话template的值永远都停留为1,while就成死循环了。将overwrite属性值写为true(默认为true,所以可以不写),则在每次执行template的时候原来j的值都会被覆盖为新的值,就像是C中的j++,便可实现递增-->
<while condition='${!j.toString().equals("5")}'>
<var-def name="j" >
<template>${j=Integer.parseInt(j.toString())+1}</template>
</var-def>
</while>
有了这个办法之后就可以配合着case语句判断index的奇偶性,实现想要的功能。
- web-harvest 探索之旅之自定义变量的自增
- web harvest 之初体验
- [Web-Harvest数据采集之二]Web-Harvest基础-抓取java代码分析
- Web-Harvest的简要介绍
- Cubernet的web探索之路
- 用 web-harvest 挖掘需要的数据
- MySQL变量自增的一个神奇之处
- 自定义表盘探索之CanvasWatchFaceService
- 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明
- C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容
- C语言探索之旅 | 第一部分第四课第二章:变量的世界之变量声明
- C语言探索之旅 | 第一部分第四课第三章:变量的世界之显示变量内容
- Web FrameWork探索之路
- web安全之XSS探索
- PHP内核探索之变量(5)- session的基本原理
- PHP内核探索之变量(5)- session的基本原理
- 【Web探索之旅】第一部分:什么是Web?
- 【Web探索之旅】第四部分:Web程序员
- web harvest 之初体验
- POJ 3522
- Ubuntu 12.10 程序图标放到启动器上
- ubuntu下sudo命令出现主机名无法解析的问题
- web-harvest case语句的一点小总结
- web-harvest 探索之旅之自定义变量的自增
- Linux系统下修改环境变量PATH路径的方法
- Java Swing JTable Demo
- Ubuntu 安装极点五笔 for ibus
- JAVA 线程池探索之路
- 将JAVA 中的enum类型与数据和方法关联起来
- Machine Learning Open Source Software
- 关于女生的程序员之路 肖舸老师
- 古堡算式ABCDE * ? = EDCBA