起因:杭电ACM的试题列表不能按照指定条件显示。
例如:
- 按试题被AC次数倒排序。
- 对未被我解决的试题,按被AC次数倒排序。
任务分解:
- 获取网页html数据到程序内存。使用URL类可轻松完成此任务。
- 将html转换成document。使用Cobra包可轻松完成此任务。
- 定位获取指定内容。使用XPath类可轻松完成此任务。
- 进一步提取数据,并生成插入SQL语句。使用正则表达式可轻松完成此任务。
- 执行SQL语句。
- 使用SQL语句进行分析。
辅助工具:
- Firefox的XPath Checker插件,可以检查你的XPath表达式是否正确。
- Firefox的Firebug插件,可以在控制台使用JavaScript来确定该如何读取定位到的内容。
一些问题:
- 为什么不使用DocumentBuilder类直接解析html?
我面对的网页的格式并不标准,它的很多标签属性值并没有使用引号引起来。
- 为什么不使用Jsoup包来解析html?
它生成的Document并没有实现接口:org.w3c.dom.Document,从而不能使用XPath来定位。
- 为什么使用XPath来定位?
逻辑清晰,结构紧凑。
- 为什么使用XPath Checker找不到匹配项?
浏览器为table标签产生了子标签tbody,tr标签在tbody内。
关键步骤:
- 编写XPath
- 生成插入SQL语句