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,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...
这对于开发者来说是一个很大的优势,可以深入理解其工作原理,以便在遇到问题时能快速定位并解决问题。 6. **直接引用**:描述中提到,只需将这个jar包引入项目,即可使用其功能。这意味着HTMLParser.jar的API设计...
在C#项目中,我们可以右键点击解决方案资源管理器中的“引用”或“依赖项”,选择“添加引用”,然后浏览找到`htmlparser.dll`,将其添加到项目中。 `WinistaDownload-dll`和`WinistaDownload-code`可能是与...
2. **示例项目**:一个或多个使用HTMLParser.net的示例应用程序,展示了如何导入库、初始化解析器、执行查询和处理HTML元素。 3. **文档**:可能包含使用指南、API参考或示例代码注释,帮助开发者理解和使用这个库。...
8. 社区支持:HTMLParser拥有一定的社区活跃度,开发者可以在开源论坛或GitHub上找到相关的资源、示例和问题解答,以便于学习和解决问题。 9. 结合其他工具:HTMLParser可以与其他工具结合使用,如Jsoup,后者是一...
在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
8. **错误处理和调试**:学习如何处理解析过程中可能出现的异常,以及如何通过日志或调试信息定位问题。 9. **性能优化**:对于大量网页的抓取,了解如何配置和优化HTMLParser以提高效率。 通过这个教程,开发者...
HtmlParser提供了一套完整的错误处理机制,包括抛出`HtmlParseException`等异常,帮助开发者捕获和处理解析过程中的问题。 7. **兼容性和版本更新** HtmlParser 2.1版发布于2015年6月,兼容多种Java版本,但后续...
无论是简单的网页抓取还是复杂的网页分析任务,HTMLParser都能够提供稳定且高效的解决方案。在实际开发中,只需正确引入jar包,并结合适当的编程技巧,就能充分利用这个框架的功能,实现各种HTML解析需求。
以下是对`HtmlParser`及其相关知识点的详细说明: 1. **HTML解析**:HTMLParser提供了对HTML文档的解析能力,将HTML文本转换为可操作的对象模型。它能够处理嵌套标签、属性、注释以及实体引用等HTML元素。 2. **...
本文将深入探讨HTMLParser 1.6版本的功能、用途、使用方法以及其在IT领域的应用。 HTMLParser的核心功能是解析HTML文档,即使在面对结构不规则或者非标准的HTML代码时,也能有效地进行解析。它提供了灵活的事件驱动...
然而,需要注意的是,HTMLParser虽强大,但并不能解决所有的HTML解析问题。有些网页可能含有非标准的HTML结构,或者使用JavaScript动态生成内容,这时可能需要结合其他工具,如Selenium来辅助处理。 总的来说,C#的...
压缩包中的`AnalyzeHtml.sln`是解决方案文件,包含了项目的配置信息。`HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1. **AnalyzeHtml**:这...
在C#中,`System.Xml`命名空间下的`XmlDocument`类可以用来创建和操作DOM树,但因为HTML的非规范性,直接使用DOM处理HTML可能会遇到问题,所以HTMLParser可能采用了更适应HTML特性的解析方式。 3. **XPath与CSS选择...
5. **文档支持**:丰富的API文档使得开发者能够快速上手,解决在实际项目中遇到的问题。 总的来说,HTMLParser2.0是一个强大且灵活的HTML解析工具,适用于各种需要处理HTML内容的场景,无论是简单的数据提取,还是...
在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...