如果需要在HTML页面中提取数据,那么NekoHTML 是个不错的工具。因为HTML跟XML不一样,可能存在一些格式不完整的元素,譬如没有end tag的table等,这个时候,NekoHTML是个很尽责的清道夫和修理工,可以帮助我们整理这些缺陷数据,最终生成一个DOM Tree。  得到DOM Tree话,使用XPath就可以轻松获取所需数据了:-)

下面是几个需要注意的问题:

1、如何使用NekoHTML?

必须在 Java Build Path里加入 nekohtml.jar , xercesImpl.jar 以及xalan.jar。下载的NekoHTML目录中并没有xercesImpl.jar和xalan.jar,需要自己下载。

2、如何获取XPath?

当然大家可以把网页的代码下下来,然后使用“人工智能”的方式获取,但是过程确实让人眼花缭乱、心力交瘁。使用FireBug吧,可以自动生成XPath。

updated:

Firebug生成的XPath中如果含有TBODY标签,需要把TBODY去掉,否则不能正确获取网页的内容。如Firebug生成的XPath为/html/body/table/tbody/tr,那么则需要修改为/html/body/table/tr。

4、如何正确结合NekoHTML和XPath?

XPath的Tag必须大写。如

String divXpath = "//DIV";//正确

String divXpath = "//div";//错误

下面举个例子,提取当当网图书的ISBN信息:

DOMParser parser = new DOMParser();try {//设置网页的默认编码parser.setProperty("http://cyberneko.org/html/properties/default-encoding","gb2312");/*The Xerces HTML DOM implementation does not support namespaces and cannot represent XHTML documents with namespace information. Therefore, in order to use the default HTML DOM implementation with NekoHTML's DOMParser to parse XHTML documents, you must turn off namespace processing.*/parser.setFeature("http://xml.org/sax/features/namespaces", false);String strURL = "http://product.dangdang.com/product.aspx?product_id=9317290";BufferedReader in = new BufferedReader(new InputStreamReader(new URL(strURL).openStream()));parser.parse(new InputSource(in));in.close();} catch (Exception e) {e.printStackTrace();}Document doc = parser.getDocument();// tags should be in upper caseString productsXpath = "/HTML/BODY/DIV[2]/DIV[4]/DIV[2]/DIV/DIV[3]/UL[@class]/LI[9]";NodeList products;try {products = XPathAPI.selectNodeList(doc, productsXpath);System.out.println("found: " + products.getLength());Node node = null;for(int i=0; i< products.getLength();i++){node = products.item(i);System.out.println( i + ":\n" + node.getTextContent());}}catch (TransformerException e) {e.printStackTrace();} 

一些有用的链接:

1、Java HTML Parser 比较

2、java XPATH

3、XPath定位

NekoHTML 和 XPath相关推荐

  1. Python的Xpath介绍和语法详解

    1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...

  2. Python案例:使用XPath的爬虫

    案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地. # tieba_xpath.py#!/usr/b ...

  3. Python:XPath与lxml类库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  4. xpath选择器简介及如何使用

    xpath选择器简介及如何使用 一.总结 一句话总结:XPath 的全称是 XML Path Language,即 XML 路径语言,它是一种在结构化文档(比如 XML 和 HTML 文档)中定位信息 ...

  5. python xpath用法_Python--xpath的使用

    chromedriver的版本问题:如果出现版本不匹配,可以尝试换一个版本的chromedriver: web自动化的元素定位--8大元素定位 6种元素: id:---id是唯一的,这时候可以用id定 ...

  6. DOM+XPath提取规则注记!

    下面是使用DOM+Xpath提取html中页面时经常使用的Xpath规则的一些示例: XPath相关的规则 没有属性 //B[not(@*)] 没有类属性 //B[not(@class)] 要求链接有 ...

  7. XPath与多线程爬虫

    一.  Xpath的介绍与配置 1.      XPath是什么 XPath是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 总结: XPat ...

  8. 爬虫之Xpath详解

    爬虫之Xpath详解 XPath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素, ...

  9. python爬取疫情信息html.xpath p标签_python xpath 如何过滤div中的script和style标签

    爬取一个页面中的div,想获取div中的文字,我是这么写的: selector.xpath('//div[@class="text-con"]').xpath('string(.) ...

最新文章

  1. thinkphp集成系列之phpmailer批量发送邮件
  2. 成功解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: 'f:\\program files\\p
  3. 018 Android加固之实现dex加载器
  4. Android-Frame布局,UI布局切换,录音,照相机,影音播放器,音频播放器
  5. ps制作20种特效文字_用PS制作裂、火、电特效——电
  6. 几种字符串到byte[] 数组转化为String 的方法
  7. Bzoj4011 [HNOI2015]落忆枫音
  8. 矩阵快速幂的学习(系统的学习)
  9. C++Debug Assertion Failed!到底出错在哪里?
  10. Spark系列(三)SparkContext分析
  11. 建立网络安全新生态,网络态势感知至关重要
  12. Vue项目使用file-saver将html转word文件、把html内容下载保存导出到本地生成doc文件包括图片:前端下载利器FileSaver
  13. ssh中关于antion取jsp传递的值接收不到
  14. java创建临时文件夹_Java 创建文件、文件夹以及临时文件
  15. JAVA实现 PDF转换 常用工具类(html转PDF、PDF添加页码、PDF文件下载、PDF添加印章或者水印)
  16. 网络综合测试仪 的功能和参数
  17. 【C语言】日期时间转秒数
  18. 为什么你要拒绝我(苹果AppStore被拒理由大全)
  19. OA系统开发,了解O2OA开发平台,如何使用?
  20. dicom文件详细解析

热门文章

  1. Android挂载系统分区执行mount和remount
  2. 财神来了 | 那些年伤害过你的分叉币
  3. Markdown编辑器 公式指导手册
  4. Qt容器:QList
  5. 【论文阅读】SISR综述:From Beginner to Master: A Survey for Deep Learning-based Single-Image Super-Resolution
  6. VTS-DEBUG VtsHalCameraProviderV2_4TargetTest CameraHidlTest.noHal1AfterP FAIL
  7. java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档
  8. 域名使用HTTPS的相关配置
  9. U-Net实现医学图像分割(pytorch)
  10. NetHunter-Rootless:安卓手机免Root安装Kali NetHunter