HtmlParser解决查询IP所在城市问题
1、技术目标
- 分析IP所在城市
- 掌握HtmlParser解析HTML内容
提示:本文提供HtmlParser帮助文档下载
2、问题描述
项目中要求按发送请求的用户IP分析出所在城市。完成该功能
可以自己维护一个IP数据库,该方式显然费时费力。目前网上有不少的
站点提供IP查询功能,可以使用这些站点的功能,通过HtmlParser分析
出来查询结果来实现的IP查询的需求
3、IP查询站点流程
以站点www.ip138.com为例,其IP数据库10天一更新,
3.1)在IP地址输入框中输入待查询的IP地址,如图:
3.2)点查询,进入查询结果页面,注意请求的URL以及参数,如图:
3.3)查询结果页面HTML代码部分,如图:
4、项目中导入HtmlParser库,文件如下:
htmllexer.jar
htmlparser.jar
提示:本文已提供下载
5、分析www.ip138.com站点的IP查询结果,代码如下:
package test; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.TableColumn; import org.htmlparser.tags.TableRow; import org.htmlparser.tags.TableTag; import org.htmlparser.util.NodeList; public class TestIP { /** * @param args */ public static void main(String[] args) { try { String ip1 = "58.253.71.109";//茂名(广东) String ip2 = "112.125.35.205";//北京 String ip3 = "192.168.60.100";//局域网 String ip4 = "211.151.135.27";//北京 String ip5 = "61.139.76.40";//成都 String ip6 = "218.205.252.26";//四川省 移动 String ip7 = "222.208.168.100";//眉山(四川) //HTML解析器 Parser parser = new Parser(); //设置IP查询请求的URL以及参数 String path = "http://www.ip138.com/ips.asp?ip=" + ip7 + "&action=2"; parser.setURL(path); parser.setEncoding("GB2312"); //HTML节点过滤器 NodeFilter tableFilter = new TagNameFilter("table");//提取table标签 NodeList tables = parser.extractAllNodesThatMatch(tableFilter); if(tables.size() < 4){//表格没有4个(提示:IP查询结果页面有4个表格) return;//不处理 } //获取第3个表格(含城市信息的表格是第3个) TableTag table = (TableTag)tables.elementAt(2); //获取第三行(包含城市信息的行) TableRow row3 = table.getRow(2); //获取第三行所有列 TableColumn[] row3cols = row3.getColumns(); //取第一列的解析器(含城市信息的列) Parser row3ColParser = Parser.createParser(row3cols[0].getStringText(), "utf-8");; //解析出li标签 NodeFilter liFilter = new TagNameFilter("li");//提取li标签 NodeList liTags = row3ColParser.extractAllNodesThatMatch(liFilter); //取出第一个li标签的值 Node node = liTags.elementAt(0); String value = node.getFirstChild().getText(); System.out.println(value); if(value.indexOf("局域网") != -1){ System.out.println("局域网"); return; } if(value.indexOf("市") == -1){//没有包含市 return; } //解析出城市名 String city = value.substring(value.indexOf(":") + 1, value.indexOf("市")); if(city.indexOf("省") != -1){ city = city.substring(city.indexOf("省") + 1); } System.out.println(city); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
htmlparser网络爬虫技术,通过关键字查询快速查找指定网站
c#版htmlparser htmlparser.dll htmlparser源代码
HTMLParser.net源代码HTMLParser.net使用demo
htmlparser.jar htmlparser教程
htmlparser2.0 htmlparser
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
一个彻底重写的htmlparser包,里面有源码,重写了两个类,彻底解决爬取网页时出现编码异常的问题!直接引用用里面的包就可以使用!
HtmlParser源码及demo
关于用java写的htmlparser网页分析
HTMLParser HTML解析 HTMLParser HTML解析 HTMLParser HTML解析
HtmlParser-2.0 API ,chm格式,方便使用
Winista HtmlParser Winista HtmlParser Winista HtmlParser Winista HtmlParser
我注意好多人都说没有org.htmlparser.Node和其他的一些.class文件,这里把下载后解压出来的5个jar包全部导入工程就可以引入所需的文件了
HTMLParser使用详解