`
HotStrong
  • 浏览: 509342 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HtmlParser解决查询IP所在城市问题

阅读更多

 

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();
		}
		
	}

}

 

 

 

4
1
分享到:
评论
4 楼 yuanq_20 2012-06-15  
推荐
yuanq_20 写道
这么做,不稳定啊!

建议考虑使用QQ显IP数据库,自己去实现~~
3 楼 yuanq_20 2012-06-15  
这么做,不稳定啊!
2 楼 luoyahu 2011-12-16  
不是有免费的IP库可以查询吗?定期升级一下IP库就好了。
htmlparser都没人维护了,还是用jsoup吧!
1 楼 kakaluyi 2011-12-15  
你的服务的稳定性加在别人服务稳定的基础,以后自己访问量起来后,别人封杀你的ip请求,风险太大,还不如自己维护呢。。。

相关推荐

    htmlparser

    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

    使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...

    htmlparser.jar 源码加jar包 彻底解决乱码

    这对于开发者来说是一个很大的优势,可以深入理解其工作原理,以便在遇到问题时能快速定位并解决问题。 6. **直接引用**:描述中提到,只需将这个jar包引入项目,即可使用其功能。这意味着HTMLParser.jar的API设计...

    c#版htmlparser htmlparser.dll htmlparser源代码

    在C#项目中,我们可以右键点击解决方案资源管理器中的“引用”或“依赖项”,选择“添加引用”,然后浏览找到`htmlparser.dll`,将其添加到项目中。 `WinistaDownload-dll`和`WinistaDownload-code`可能是与...

    HTMLParser.net源代码HTMLParser.net使用demo

    2. **示例项目**:一个或多个使用HTMLParser.net的示例应用程序,展示了如何导入库、初始化解析器、执行查询和处理HTML元素。 3. **文档**:可能包含使用指南、API参考或示例代码注释,帮助开发者理解和使用这个库。...

    htmlparser网页分析

    8. 社区支持:HTMLParser拥有一定的社区活跃度,开发者可以在开源论坛或GitHub上找到相关的资源、示例和问题解答,以便于学习和解决问题。 9. 结合其他工具:HTMLParser可以与其他工具结合使用,如Jsoup,后者是一...

    htmlparser.jar文件

    在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...

    htmlparser-1.2.1 jar

    htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载

    htmlparser库与教程

    8. **错误处理和调试**:学习如何处理解析过程中可能出现的异常,以及如何通过日志或调试信息定位问题。 9. **性能优化**:对于大量网页的抓取,了解如何配置和优化HTMLParser以提高效率。 通过这个教程,开发者...

    HtmlParser 2.1 码源

    HtmlParser提供了一套完整的错误处理机制,包括抛出`HtmlParseException`等异常,帮助开发者捕获和处理解析过程中的问题。 7. **兼容性和版本更新** HtmlParser 2.1版发布于2015年6月,兼容多种Java版本,但后续...

    htmlParser.jar包

    无论是简单的网页抓取还是复杂的网页分析任务,HTMLParser都能够提供稳定且高效的解决方案。在实际开发中,只需正确引入jar包,并结合适当的编程技巧,就能充分利用这个框架的功能,实现各种HTML解析需求。

    HtmlParser源码及demo

    以下是对`HtmlParser`及其相关知识点的详细说明: 1. **HTML解析**:HTMLParser提供了对HTML文档的解析能力,将HTML文本转换为可操作的对象模型。它能够处理嵌套标签、属性、注释以及实体引用等HTML元素。 2. **...

    htmlparser1.6最新版

    本文将深入探讨HTMLParser 1.6版本的功能、用途、使用方法以及其在IT领域的应用。 HTMLParser的核心功能是解析HTML文档,即使在面对结构不规则或者非标准的HTML代码时,也能有效地进行解析。它提供了灵活的事件驱动...

    C# HTMLParser下载.rar

    然而,需要注意的是,HTMLParser虽强大,但并不能解决所有的HTML解析问题。有些网页可能含有非标准的HTML结构,或者使用JavaScript动态生成内容,这时可能需要结合其他工具,如Selenium来辅助处理。 总的来说,C#的...

    Winista.Htmlparser.Net 源码 +Demo

    压缩包中的`AnalyzeHtml.sln`是解决方案文件,包含了项目的配置信息。`HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1. **AnalyzeHtml**:这...

    HtmlParser c#源码+demo

    在C#中,`System.Xml`命名空间下的`XmlDocument`类可以用来创建和操作DOM树,但因为HTML的非规范性,直接使用DOM处理HTML可能会遇到问题,所以HTMLParser可能采用了更适应HTML特性的解析方式。 3. **XPath与CSS选择...

    htmlparser2.0_dll+htmlparserAPI

    5. **文档支持**:丰富的API文档使得开发者能够快速上手,解决在实际项目中遇到的问题。 总的来说,HTMLParser2.0是一个强大且灵活的HTML解析工具,适用于各种需要处理HTML内容的场景,无论是简单的数据提取,还是...

    htmlparser的jar包

    在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...

Global site tag (gtag.js) - Google Analytics