做一个类似爬虫的小品,要从网页上爬下数据来,处理后,保存。
试用了HTMLParser、NekoHtml、JTidy发现效果都不好,尤其是网页书写不规范的时候。
最后,选定了HTMLCleaner。几乎可以搞定所有网页。
用起来也很简单,网上大部分中文介绍都会有类似这样的代码示例:
TagNode root = cleaner.clean(text or url);
然后用这样的代码保存:
CleanerProperties properties = cleaner.getProperties(); PrettyXmlSerializer prettyXmlSerializer = new PrettyXmlSerializer(properties); prettyXmlSerializer.write(root, Writer, encoding);
不过,在测试的时候,爬126.com的首页。爬下来的页面,在浏览器里打开的时候,背景图打不开。
查看保存的文件发现,页面上的js,有些被在奇怪的地方换行了:
$id('styleConf').innerHTML = $id('styleconf' + n).innerHTML + ' <b class="ico ico-arr ico-arr-d"> </b>';
比如上面这样……
显然这种换行方法,会导致浏览器引起js错误(把String分成多行而没有续行符)。
分析后,觉得应该是HTMLClenter为了代码的美观,试图让每个Tag另起一行(遇到"<" 或者"<"、“>”对就换行,没仔细研究)
于是上官网看了下介绍:
http://htmlcleaner.sourceforge.net/parameters.php
并没有发现哪个设置是让Tag不换行的……
接着又仔细一想,应该不是Parser时候的问题——如果是的话,说明HTMLCleaner错把JS里面的内容解析为Tag了。不过显然没有(倒是HTMLParser有这样的迹象)
进一步输出查看,也印证了这样的假设——输出script标签的时候发现,类似刚才那种地方并没有换行。
也就是说,这种修改是在保存的时候发生的。
这才注意到,那个大多数介绍页面上,用来保存页面的类,叫做PrettyXmlSerialize ……- -!
查了API后,发现这么一段话:
凶手就是它没错了,就是它做了半吊子的事情:不是按照HTMLCleaner分析出来的Tag来决定哪应该换行,而自己擅自分析页面,乱换行……
找到原因就好办,又看了看API,发现另外两个类:SimpleXmlSerializer和SimpleHtmlSerializer
都是“without indenting lines”的……实际测试之后,发现效果差不多。
于是,问题解决。
想说:
如果怀着半吊子的心态的话……果然,多一事不如少一事……
如果恰巧有人用HTMLCleaner,又恰巧需要保存页面的话……
如果页面内容比较简单也就算了。如果想对复杂的话……
最好还是选择相对简单的保存方法——简单的,也许更好……
相关推荐
为了更好地实施深度学习,教师的角色需要从知识的传递者转变为学习的促进者和引导者。教师应拥有丰富、广泛的知识积累,具备宏观和微观的视角,能够深入把握教学内容,并能跨越学科界限进行跨界学习。同时,教师应有...
NOI骗分导论——关于应付竞赛不会难题的策略参考 在OI竞赛中,我们经常会遇到一些让人头疼的问题,这些问题可能会让我们感到很难解决。那么,在这种情况下,我们该如何应对呢?本文将为您提供一些有用的策略,帮助...
数学建模——合理开挖土地问题 本论文主要研究如何在山地之中选择合适的方位与开挖深度,从而使总的土石方量最小。问题的提出是基于 A 市某工厂需要在一片山地之中开挖出一个 800 米×600 米平坦连续的长方形地块...
【店铺销售技巧——终端常见疑难问题模板】 销售技巧在店铺运营中扮演着至关重要的角色,尤其是在面对各种各样的顾客疑虑和挑战时。本模板旨在帮助导购员有效地应对终端销售中的常见问题,提升销售业绩。 首先,...
【正文】 《第二课百舸争流的思想——哲学的基本问题》是高中...通过本课的学习,学生不仅会掌握哲学的基本知识,还将培养起对生活现象的哲学洞察力,理解哲学如何与现实生活相联系,从而更好地应对生活中的各种挑战。
12.MATLAB神经网络43个案例分析 SVM的参数优化——如何更好的提升分类器的性能12.MATLAB神经网络43个案例分析 SVM的参数优化——如何更好的提升分类器的性能12.MATLAB神经网络43个案例分析 SVM的参数优化——如何更...
它能够帮助程序员更好地管理日常的工作任务、个人日程,甚至代码片段和学习笔记。通过PIM软件的组织,程序员可以将散落在各处的信息汇总起来,形成一个有序的知识库。 “pim.ini”文件的存在,显示出作者对PIM软件...
它们可以帮助开发者更好地理解和应用“简单”的原则,从而在实践中创造出更高效、更优雅的软件解决方案。 《简单之美——软件开发实践者的思考》一书的PDF版本,允许读者在电子设备上随时查阅,大大提高了阅读的...
为了让孩子们能够更好地理解和掌握这一概念,【智慧广场——重叠问题】PPT学习教案应运而生。教案以一种通俗易懂的方式,结合生动的场景和互动环节,引领儿童一步步深入数学的奇妙世界,教会他们如何巧妙地解决重叠...
在2003年的全国大学生电子设计竞赛中,来自山东交通学院的团队设计了一款简易智能电动小车,并针对E题——避障——提交了一份详细的报告。该报告详细介绍了小车的设计理念、构造、功能实现及其运行原理。在本报告中...
首先,教案中以烧水和扫地两个简单活动为例,引出了优化理论中的核心思想——并行处理。在这一例子中,我们可以在烧水的空档中安排扫地,这样两个活动就可以在同一时间段内完成,从而将原本分别执行所需的时间从两个...
2. **简化和转换问题**:将复杂的问题转化为更简单的形式,或者找到一个与原问题等价的模型。在编程中,这可能意味着将一个大问题分解为若干小问题,或者通过抽象和类比找到已知的解决方案。 3. **拟定计划**:根据...
这部分内容有助于观众理解自己的依恋风格,从而更好地经营亲密关系。 社会学视角则让我们看到社会结构、性别角色、社会变迁如何在宏观层面上塑造我们的爱情观念和行为。这部分的探讨可以加深我们对爱情如何受到社会...
学生通过循序渐进的三个步骤——阅读与理解、分析与解答、回顾与反思,不仅掌握了数学知识,更重要的是学会了如何将这些知识应用到解决实际问题中去,从而培养了解决问题的意识和技能。这种方法的实践,要求教师具备...
《陈广 C#数据结构视频 第10章 综合实训——八数码问题(1)》是一系列关于数据结构和算法应用的视频教程,主要针对C#编程语言,旨在通过实际案例帮助学习者掌握数据结构在解决实际问题中的运用。八数码问题,也称为...
如果直接在主线程保存日志和发送日志,涉及到文件的读写,如果读写内容过大,会明显抢占主线程资源,造成卡顿,这里使用 Thread 进行日志的保存和邮件发送,避免造成主线程卡顿,这里简单说明,如果你有更好的方法,...
综上所述,《数据结构——迷宫》不仅仅是一个简单的游戏,它是一个富有教育意义的C语言项目。它不仅让学习者通过互动游戏的方式掌握数据结构和算法,还为编程学习者提供了一个展示编程技能和创新思维的舞台。学习者...
MP3文件的压缩率通常在128kbps到320kbps之间,较高的比特率意味着更好的音质,但文件也会更大。这种格式因其便携性和兼容性而被广大用户接受,无论是移动设备还是桌面系统,都能轻松播放MP3文件。 在Unity游戏开发...