2023年6月29日发(作者:)
HTML和XML数据的分析与解析引⾔⽬前在 Java 中,解析 HTML ⼯具主要包含以下⼏种:1. jsoup:强⼤的 HTML 解析⼯具,⽀持以 jQuery 中 CSS Selector 的⽅式提取 HTML 中的元素,学习成本较低。2. HtmlCleaner:另外⼀款开源的 Java 语⾔的 HTML ⽂档解析器,⽀持以 XPath 的⽅式提取 HTML 中的元素。另外,在此说明,学习 XPath 语法对于使⽤另外⼀款基于 Selenium 的爬⾍⼯具特别有帮助。3. Htmlparser:对 HTML 进⾏有效信息搜索和提取的⼀款 Java ⼯具,但该⼯具已长时间不维护了(上次更新时间为2011年)。我在前⾯的篇章中,已介绍了 jsoup ⼯具解析 HTML 的内容,因此,在本⽂将主要介绍 HtmlCleaner 和 HtmlParser ⼯具对 HTML 的解析。针对 XML 数据,Java 也有很多⼯具进⾏解析,本⽂主要介绍 jsoup 解析 XML。HtmlCleaner 解析 HTMLHtmlCleaner 下载在 中搜索 HtmlCleaner。并使⽤ Eclipse 或其他⼯具构建 Maven ⼯程,使⽤ Maven ⼯程中的 下载 HtmlCleaner 相关依赖Jar 包。本篇以最新版 HtmlCleaner 配置为例:
浏览器脚本教程
从左侧的菜单选择你需要的教程!
JavaScript
JavaScript 是世界上最流⾏的脚本语⾔。
JavaScript 是属于 web 的语⾔,它适⽤于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页⾯增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有⾮常简单的语法。⼏乎每个⼈都有能⼒将⼩的 JavaScript ⽚段添加到⽹页中。
如果您希望学习更多关于 JavaScript 的知识,请马上访问我们的
//body/a[1]//body//a[last()]定位⼀个节点可以使⽤多种写法,例如上⾯的 HTML,选取所有 id 属性为 w3school 的 div 节点下的 h1 节点,可以使⽤以下⼏种Xpath 定位。//div[@id='w3school']//h1//div[@id='w3school']/h1//*[@id='w3school']/h1另外在浏览器中,可以在审查(元素)中,定位我们需要采集的数据,右键之后点击 copy -> copy xpath,获取相应的 Xpath 写法。解析 HTML使⽤ HtmlCleaner ⾸先要对其进⾏初始化,初始化之后,我们便可以使⽤ Xpath 语法操作节点。以下为 w3school 页⾯的解析案例。解析的内容如下:对应的程序为://这⾥笔者使⽤jsoup获取html⽂件Document doc = t("/").timeout(5000).get(); /String html =(); //转化成String格式//使⽤Htmlcleaner解析数据HtmlCleaner cleaner = new HtmlCleaner(); //初始化对象//n(html);TagNode node = (html); //解析HTML⽂件//通过Xpath定位标题的位置,这⾥使⽤//h1和/h1的结果是⼀样的Object[] ns = teXPath("//div[@id='w3school']//h1");
n("HTML中的标题是:t" + ((TagNode)ns[0]).getText());
Object[] ns1 = teXPath("//*[@id='w3school']/h1");
n("HTML中的标题是:t" + ((TagNode)ns1[0]).getText());
//遍历获取课程名以及课程地址Object[] ns2 = teXPath("//*[@id='course']/ul//a"); //这⾥使⽤//a表⽰不考虑位置,如果使⽤/a获取不到内容for(Object on : ns2) {
TagNode n = (TagNode) on;
n("课程名为:t" + t() + "t地址为:t" + ributeByName("href"));
}
//获取每个课程名称以及其对应的简介Object[] ns3 = teXPath("//*[@id='maincontent']//div");for (int i = 1; i < ; i++) { TagNode n = (TagNode) ns3[i];
//获取课程名称 String courseName = ementByName("h2", true).getText().toString(); //循环遍历所有的p节点获取课程简介 Object[] objarrtr = teXPath("//p"); String summary = ""; for(Object on : objarrtr) {
summary += ((TagNode) on).getText().toString(); }
n(courseName + "t" + summary);}在使⽤ evaluateXPath(String xPathExpression) 操作 TagNode 时得到的是 Object[] 数组,通过对该数组的操作便能够获取数据。另外,HtmlCleaner 还提供了很多种⽤法,例如上述程序中的 findElementByName()、getAttributeByName() 等操作⽅法,感兴趣的读者可以学习。利⽤上述程序解析得到的结果,如下图所⽰:HtmlParser 解析 HTMLHtmlParser 下载依旧采⽤ Maven ⼯程中的 下载 HtmlParser 相关依赖 Jar 包,配置如下:
String html =(); //转化成String格式//使⽤Lexer构造Lexer lexer = new Lexer(html);Parser parser = new Parser(lexer);//过滤页⾯中的链接标签NodeFilter filter = new NodeClassFilter();//获取匹配到的节点NodeList list = tAllNodesThatMatch(filter);//遍历每⼀个节点for(int i=0; i<();i++){ Node node = (Node)tAt(i);
n("链接为:" + ((LinkTag) node).getLink() + "t标题为:" + nTextString() );}上述程序对应的输出结果如下图所⽰:我要讲解的第⼆个案例是基于 Filter 层层过滤的⽅式解析想要的数据。例如,w3school 页⾯中的:该案例程序使⽤ Parser(String resource) 构造,程序如下://⽣成⼀个解析器对象,⽤⽹页的 url 作为参数Parser parser = new Parser("/");//设置⽹页的编码(GBK)oding("gbk");//过滤页⾯中的标签NodeFilter filtertag= new TagNameFilter("ul");NodeFilter filterParent = new HasParentFilter(filtertag); //⽗节点包含ulNodeFilter filtername = new TagNameFilter("li"); //选择的节点为每个liNodeFilter filterId= new HasAttributeFilter("id"); //并且li节点中包含id属性NodeFilter filter = new AndFilter(filterParent,filtername); //并操作NodeFilter filterfinal = new AndFilter(filter,filterId); //并操作NodeList list = tAllNodesThatMatch(filterfinal); //选择匹配到的内容//循环遍历for(int i=0; i<();i++){ //获取li的第⼀个⼦节点 Node node = (Node)tAt(i).getFirstChild();
n( "链接为:" + ((LinkTag) node).getLink() +"t标题为:" + nTextString() );}程序的输出结果如下:我要讲解的第三个案例是基于 CSS 选择器来解析想要的数据。例如,w3school 页⾯中的:这个案例程序我将使⽤ Parser(URLConnection connection) 构造,具体程序如下://使⽤URLConnection请求数据URL url = new URL("/");URLConnection conn = nnection();Parser parser = new Parser(conn);//通过css选择器解析内容
CssSelectorNodeFilter Filter=new CssSelectorNodeFilter ("#course > ul > li");
NodeList list = tAllNodesThatMatch(Filter); //选择匹配到的内容//循环遍历for(int i=0; i<();i++){ //获取li的第⼀个⼦节点 Node node = (Node)tAt(i).getFirstChild();
n( "链接为:" + ((LinkTag) node).getLink() +"t标题为:" + nTextString() );}使⽤ CSS 选择器筛选是⼀种简单⼜快捷的⽅式,也是我个⼈最喜欢⽤的⼀种解析 HTML 的⽅式,这和 jsoup 有异曲同⼯之处。如要系统的学习 CSS 选择器的使⽤,读者可以参考:。jsoup 解析 XML为讲解 XML 数据的解析,我选取的案例是爬取⽹易汽车的销量数据,例如捷达汽车的销量,页⾯为:其部分 XML ⽂件如下:
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687986168a63997.html
评论列表(0条)