xpath提取网页内容

需求:
       读取personList.html网页中所有联系人信息
        按照以下格式输出:
    编号:001    姓名:木丁西    性别:男    年龄:18    地址:XXXXX    电话:XXXXXXXXX
    编号:002    姓名:木丁西    性别:男    年龄:18    地址:XXXXX    电话:XXXXXXXXX
    编号:003    姓名:木丁西    性别:男    年龄:18    地址:XXXXX    电话:XXXXXXXXX  
 html代码如下:
   
   
  1. <html>
  2. <head>
  3. <title>2016级毕业同学通讯录</title>
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  5. </head>
  6. <body>
  7. <center><h1>2016级毕业同学通讯录</h1></center>
  8. <table border="1" align="center" id="contactForm">
  9. <thead>
  10. <tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>地址</th><th>电话</th></tr>
  11. </thead>
  12. <tbody>
  13. <tr>
  14. <td>001</td>
  15. <td>张三</td>
  16. <td></td>
  17. <td>18</td>
  18. <td>广州市天河区</td>
  19. <td>18071897423</td>
  20. </tr>
  21. <tr>
  22. <td>002</td>
  23. <td>李四</td>
  24. <td></td>
  25. <td>20</td>
  26. <td>广州市越秀区</td>
  27. <td>17021897556</td>
  28. </tr>
  29. <tr>
  30. <td>003</td>
  31. <td>郭靖</td>
  32. <td></td>
  33. <td>30</td>
  34. <td>广州市番禺区</td>
  35. <td>1342214321</td>
  36. </tr>
  37. </tbody>
  38. </table>
  39. </body>
  40. </html>
Demo如下:
   
   
  1. package com.dom4j.xpath;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.Text;
  8. import org.dom4j.io.SAXReader;
  9. /**
  10. * Author:Liu Zhiyong(QQ:1012421396)
  11. * Version:Version_1
  12. * Date:2016年11月7日21:29:42
  13. * Desc:
  14. 需求:读取personList.html中所有联系人信息
  15. 按照以下格式输出:
  16. 编号:001 姓名:木丁西 性别:男 年龄:18 地址:XXXXX 电话:XXXXXXXXX
  17. 编号:002 姓名:木丁西 性别:男 年龄:18 地址:XXXXX 电话:XXXXXXXXX
  18. 编号:003 姓名:木丁西 性别:男 年龄:18 地址:XXXXX 电话:XXXXXXXXX
  19. 。。。。
  20. */
  21. public class ReadHtml {
  22. public static void main(String[] args) throws Exception {
  23. //读取personList.html文件,获取Document对象
  24. Document document = new SAXReader().read(new File("./src/personList.html"));
  25. //读取title标签
  26. String xpath = "//title/text()";
  27. Text titleText = (Text)document.selectSingleNode(xpath);
  28. System.out.println(titleText.getText());
  29. //获取所有的tr标签对象(有多少个tr标签就有多少个联系人)
  30. xpath = "//tbody/tr";
  31. List<Element> list = document.selectNodes(xpath);
  32. //创建Person集合对象,存储所有联系人对象
  33. ArrayList<Person> personList = new ArrayList();
  34. //遍历所有联系人---方式1:
  35. /* for(int i=1; i<=list.size(); i++){
  36. //创建Person对象
  37. Person person = new Person();
  38. //获取每个tr下面td标签
  39. xpath = "//tr[" + i + "]/td";
  40. //获取第1个td标签里面的文本值
  41. String id = document.selectSingleNode(xpath + "[1]").getText();
  42. String name = document.selectSingleNode(xpath + "[2]").getText();
  43. String sex = document.selectSingleNode(xpath + "[3]").getText();
  44. String age = document.selectSingleNode(xpath + "[4]").getText();
  45. String address = document.selectSingleNode(xpath + "[5]").getText();
  46. String phone = document.selectSingleNode(xpath + "[6]").getText();
  47. person.setId(id);
  48. person.setName(name);
  49. person.setSex(sex);
  50. person.setAge(age);
  51. person.setAddress(address);
  52. person.setPhone(phone);
  53. //将person对象添加到personList集合中去
  54. personList.add(person);
  55. }*/
  56. //遍历所有联系人---方式2:
  57. /* for(Element e : list){
  58. //获取联系人信息---方式3
  59. Element tdEle = (Element)e.elements().get(0);
  60. String id = tdEle.getText();
  61. tdEle = (Element)e.elements().get(1);
  62. String name = tdEle.getText();
  63. tdEle = (Element)e.elements().get(2);
  64. String sex = tdEle.getText();
  65. tdEle = (Element)e.elements().get(3);
  66. String age = tdEle.getText();
  67. tdEle = (Element)e.elements().get(4);
  68. String address = tdEle.getText();
  69. tdEle = (Element)e.elements().get(5);
  70. String phone = tdEle.getText();
  71. //创建Person对象
  72. Person person = new Person();
  73. person.setId(id);
  74. person.setName(name);
  75. person.setSex(sex);
  76. person.setAge(age);
  77. person.setAddress(address);
  78. person.setPhone(phone);
  79. //将person对象添加到personList集合中去
  80. personList.add(person);
  81. }*/
  82. //遍历所有联系人---方式3:
  83. for(Element e : list){
  84. //注意下面的"td[1]/text()" 表示当前路径下 不能为"/td[1]/text()"
  85. String id = e.selectSingleNode("td[1]/text()").getText();
  86. String name = e.selectSingleNode("td[2]/text()").getText();
  87. String sex = e.selectSingleNode("td[3]/text()").getText();
  88. String age = e.selectSingleNode("td[4]/text()").getText();
  89. String address = e.selectSingleNode("td[5]/text()").getText();
  90. String phone = e.selectSingleNode("td[6]/text()").getText();
  91. //创建Person对象
  92. Person person = new Person();
  93. person.setId(id);
  94. person.setName(name);
  95. person.setSex(sex);
  96. person.setAge(age);
  97. person.setAddress(address);
  98. person.setPhone(phone);
  99. //将person对象添加到personList集合中去
  100. personList.add(person);
  101. }
  102. //打印输出联系人集合
  103. for(Person person : personList){
  104. System.out.println(person);
  105. }
  106. }
  107. }

Person对象
   
   
  1. package com.dom4j.xpath;
  2. public class Person {
  3. private String id;
  4. private String name;
  5. private String sex;
  6. private String age;
  7. private String address;
  8. private String phone;
  9. public String getId() {
  10. return id;
  11. }
  12. public String getAge() {
  13. return age;
  14. }
  15. public void setAge(String age) {
  16. this.age = age;
  17. }
  18. public void setId(String id) {
  19. this.id = id;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public String getSex() {
  28. return sex;
  29. }
  30. public void setSex(String sex) {
  31. this.sex = sex;
  32. }
  33. public String getAddress() {
  34. return address;
  35. }
  36. public void setAddress(String address) {
  37. this.address = address;
  38. }
  39. public String getPhone() {
  40. return phone;
  41. }
  42. public void setPhone(String phone) {
  43. this.phone = phone;
  44. }
  45. @Override
  46. public String toString() {
  47. return "编号:" + id + "\t 姓名:" + name + "\t 性别:" + sex
  48. + "\t 年龄:" + age + "\t 地址:" + address + "\t 电话:" + phone;
  49. }
  50. }
效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值