htmlparser 精确提取的一些代码
- ConnectionManager manager = Page.getConnectionManager();
- Parser parser = new Parser(manager
- .openConnection("http://www.verycd.com/topics/2760827/"));
- parser.setEncoding("GBK");
- //提取a标签里的img图片链接
- // NodeFilter filter = new AndFilter(new TagNameFilter("a"),
- // new HasChildFilter(new TagNameFilter("img")));
- // NodeFilter filter = new TagNameFilter("title");
- //提取input里面的东西
- NodeFilter filter = new AndFilter(new TagNameFilter("input"),
- new HasAttributeFilter("class","forminput"));
- // NodeList nodeList = parser.parse(filter);
- NodeList nodeList = parser.extractAllNodesThatMatch(filter);
- NodeIterator it = nodeList.elements();
- while (it.hasMoreNodes()) {
- Node node = it.nextNode();
- System.out.println(node.toHtml());
- }
- }
二、
- // 获取一个网页上所有的链接和图片链接
- public static void extracLinks(String url) {
- try {
- Parser parser = new Parser(url);
- parser.setEncoding("gb2312");
- //过滤 <frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接
- NodeFilter frameFilter = new NodeFilter() {
- public boolean accept(Node node) {
- if (node.getText().startsWith("frame src=")) {
- return true;
- } else {
- return false;
- }
- }
- };
- //OrFilter 来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系
- OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new
- NodeClassFilter(ImageTag.class));
- OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
- //得到所有经过过滤的标签
- NodeList list = parser.extractAllNodesThatMatch(linkFilter);
- for (int i = 0; i < list.size(); i++) {
- Node tag = list.elementAt(i);
- if (tag instanceof LinkTag)//<a> 标签
- {
- LinkTag link = (LinkTag) tag;
- String linkUrl = link.getLink();//url
- String text = link.getLinkText();//链接文字
- System.out.println(linkUrl + "**********" + text);
- }
- else if (tag instanceof ImageTag)//<img> 标签
- {
- ImageTag image = (ImageTag) list.elementAt(i);
- System.out.print(image.getImageURL() + "********");//图片地址
- System.out.println(image.getText());//图片文字
- }
- else//<frame> 标签
- {
- //提取 frame 里 src 属性的链接如 <frame src="test.html"/>
- String frame = tag.getText();
- int start = frame.indexOf("src=");
- frame = frame.substring(start);
- int end = frame.indexOf(" ");
- if (end == -1)
- end = frame.indexOf(">");
- frame = frame.substring(5, end - 1);
- System.out.println(frame);
- }
- }
- } catch (ParserException e) {
- e.printStackTrace();
- }
- }
三、
- public void test2() throws ParserException{
- ConnectionManager manager = Page.getConnectionManager();
- Parser parser = new Parser(manager.openConnection("http://www.verycd.com/sto/datum/computer/page1"));
- //提取A标签,他有一个父标签为H3
- NodeFilter filter = new AndFilter(new TagNameFilter("a"),new HasParentFilter(new TagNameFilter("h3")));
- NodeList nodes = parser.parse(filter);
- NodeIterator it = nodes.elements();
- while (it.hasMoreNodes()) {
- Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
- if (node instanceof LinkTag) { //转换
- LinkTag linkNode = (LinkTag) node;
- System.out.println("http://www.verycd.com"+linkNode.getAttribute("href"));
- }
- }
- }
四、
- ConnectionManager manager = Page.getConnectionManager();
- Parser parser = new Parser(manager.openConnection("http://huodong.sodao.com/39/info#"));
- NodeFilter filter = new StringFilter("减价幅度"); //用了StringFilter,可以立即提取出所在的text节点
- NodeList nodes = parser.parse(filter);
- NodeIterator it = nodes.elements();
- while (it.hasMoreNodes()) {
- Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
- System.out.println(node.getParent().toHtml()); //通过indexof方法提取想要的text
五、
- /**
- * 用htmlparser提取图片的几种方法
- */
- public class Test {
- static Parser parser = new Parser();
- public static void test1(String url) throws ParserException{
- Parser parser = new Parser();
- parser.setURL(url);
- parser.setEncoding("GBK");
- //第一种方法
- NodeFilter imageFilter = new NodeFilter() {
- public boolean accept(Node node) {
- return (node instanceof ImageTag);
- }
- };
- NodeList images = parser.extractAllNodesThatMatch(imageFilter);
- // 第二种方法
- // NodeFilter imageFilter = new TagNameFilter("img");
- //第三种方法
- // NodeFilter imageFilter = new NodeClassFilter(ImageTag.class);
- // NodeList images = parser.parse(imageFilter);
- System.out.println("Size: " + images.size());
- for(NodeIterator it = images.elements(); it.hasMoreNodes();){
- ImageTag node = (ImageTag) it.nextNode();
- System.out.println(node.getAttribute("src"));
- }
- }
- public static void test2(String url) throws ParserException {
- Parser parser = new Parser();
- parser.setURL(url);
- parser.setEncoding("GBK");
- NodeFilter divFilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id","text_content"));
- NodeList divs = parser.parse(divFilter);
- System.out.println(removeTag(divs.elementAt(0).toHtml()));
- }
- public static String removeTag(String content) {
- if (null != content && !"".equals(content.trim())) {
- while (content.indexOf("<") >=0 && content.indexOf(">") >= 0) {
- int i = content.indexOf("<");
- int j = content.indexOf(">");
- if (i < j) {
- String contetn1 = content.substring(0, i);
- String content2 = content.substring(j + 1,
- content.length() );
- content = contetn1 + content2;
- }
- }
- }
- return content;
- }
- public static void main(String[] args) throws ParserException {
- String url = "http://news.dayoo.com/china/200908/11/53868_10386441.htm";
- Test.test2(url);
- }
- }
- =====================================================================
- /** *//**
- * 分别读纯文本和链接.
- * @param result 网页的内容
- * @throws Exception
- */
- public static void readTextAndLinkAndTitle(String result) throws Exception {
- Parser parser;
- NodeList nodelist;
- parser = Parser.createParser(result, "utf8");
- NodeFilter textFilter = new NodeClassFilter(TextNode.class);
- NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
- NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
- OrFilter lastFilter = new OrFilter();
- lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });
- nodelist = parser.parse(lastFilter);
- Node[] nodes = nodelist.toNodeArray();
- String line = "";
- for (int i = 0; i < nodes.length; i++) {
- Node node = nodes[i];
- if (node instanceof TextNode) {
- TextNode textnode = (TextNode) node;
- line = textnode.getText();
- } else if (node instanceof LinkTag) {
- LinkTag link = (LinkTag) node;
- line = link.getLink();
- } else if (node instanceof TitleTag) {
- TitleTag titlenode = (TitleTag) node;
- line = titlenode.getTitle();
- }
- if (isTrimEmpty(line))
- continue;
- System.out.println(line);
- }
- }
六、
- /**
- * @author rrong_m
- * @throws ParserException
- */
- public static void getWords(String url) throws ParserException {
- Parser parser = new Parser(url);
- NodeFilter filter = new HasAttributeFilter("id", "word_more_con");
- NodeList nodelist = parser.extractAllNodesThatMatch(filter);
- NodeFilter filter1 = new NodeClassFilter(LinkTag.class);
- nodelist = nodelist.extractAllNodesThatMatch(filter1, true);
- for (int i = 0; i < nodelist.size(); i++) {
- LinkTag link = (LinkTag) nodelist.elementAt(i);
- System.out.println(link.getLinkText() + ":" + link.getLink());
- }
- }
七、处理html里面的table
- public List getChangyu(String id) throws HttpException, IOException, ParserException
- {
- HttpClient hc=new HttpClient();
- hc.getParams().setContentCharset("gb2312");
- PostMethod pm=new PostMethod("http://61.145.121.47/custSearch.jsp");
- pm.setParameter("bnos","111111111111");
- hc.executeMethod(pm);
- String temp=pm.getResponseBodyAsString(50000);//设置获取html代码的数量,否则会报错,过大
- //System.out.print(temp);
- Parser parser=new Parser(temp);
- NodeFilter filter=new HasAttributeFilter("cellpadding","-1");
- NodeList nodelist=parser.extractAllNodesThatMatch(filter);
- if(nodelist.size()>0)
- {
- NodeFilter filter1=new NodeClassFilter(TableTag.class);
- nodelist=nodelist.extractAllNodesThatMatch(filter1,true);
- if(nodelist.size()>0)
- {
- TableTag table=(TableTag) nodelist.elementAt(0);
- TableRow [] rows=table.getRows();
- if(rows.length>1)
- {
- for(int i=2;i<rows.length;i++)
- {
- TableRow row=rows[i];
- TableColumn td=row.getColumns()[0];
- TableColumn td1=row.getColumns()[1];
- System.out.println(td.toPlainTextString()+" "+td1.toPlainTextString());
- }
- }
- }
- }
- else
- {
- }
- return null;
- }
八、查询IP
- public static void getIp(String ip) throws ParserException
- {
- String url="http://www.ip138.com/ips.asp?ip="+ip;
- Parser parser=new Parser(url);
- parser.setEncoding("gb2312");//设置编码否则得到的是乱码51jsp.cn
- NodeList nodelist=null;
- NodeFilter filter=new HasAttributeFilter("class","ul1");//定义过滤51jsp.cn
- nodelist=parser.extractAllNodesThatMatch(filter);
- if(nodelist.size()>0)
- {
- System.out.println("您查询的IP为:"+ip);
- System.out.println(nodelist.elementAt(0).toPlainTextString());
- }
- }
- public static void main(String[] args) throws ParserException {
- getIp("125.33.192.180");
- }
九、提取html里面的p标签里面的内容
- public static ArrayList <String> getParagraphList( String content){
- ArrayList <String> paraList=new ArrayList <String>();
- Parser myParser=new Parser();
- NodeList nodeList = null;
- NodeFilter paraFilter = new NodeClassFilter(ParagraphTag.class);
- try {
- myParser.setInputHTML(content);
- nodeList = myParser.parse(paraFilter);
- for (int i = 0; i <= nodeList.size(); i++) {
- ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i);
- if(tag!=null){
- // System.out.println(tag.getStringText());
- // System.out.println("***********************************");
- paraList.add(tag.getStringText());
- }
- }
- } catch (ParserException e) {
- e.printStackTrace();
- }
- return paraList;
- }
htmlparser 精确提取的一些代码的更多相关文章
- webpack提取公共js代码
webpack打包js代码与提取公共js代码分析 webpack提取公共js代码示例 一.分析 webpack默认打包js代码时,是将从入口js模块开始,将入口js模块所依赖的js以及模块逐层依赖的模 ...
- 在.NET中使用JQuery 选择器精确提取网页内容
1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...
- 波特词干(Porter Streamming)提取算法无代码单纯理解
最近写东西提到这个算法,要看一下,结果网上都是直接根据代码解释,对于我这种菜鸟在刚开始看一个算法的时候真心不想直接看代码学.奈何都是各种语言的代码,么得办法.先走了一遍,有了大致的了解,翻译成自己的话 ...
- 记webpack下提取公共js代码的方法
环境: webpack4.6 + html-webpack-plugin 多页面多入口 经多次研究,稍微靠谱可用的配置 optimization: { splitChunks: { minSize: ...
- 提取DLL类库代码
@SET destFolder=.\bin@XCOPY /I /Y %SYSTEMDRIVE%\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Pro ...
- webpack学习笔记--提取公共代码
为什么需要提取公共代码 大型网站通常会由多个页面组成,每个页面都是一个独立的单页应用. 但由于所有页面都采用同样的技术栈,以及使用同一套样式代码,这导致这些页面之间有很多相同的代码. 如果每个页面的代 ...
- webpack4 系列教程(三): 多页面解决方案--提取公共代码
这节课讲解webpack4打包多页面应用过程中的提取公共代码部分.相比于webpack3,4.0版本用optimization.splitChunks配置替换了3.0版本的CommonsChunkPl ...
- HttpClient和 HtmlParser实现爬虫
网络爬虫技术 1 什么叫网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不 ...
- HttpClient 与 HtmlParser 简介 转载
转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...
随机推荐
- MFC GDI相关对象
首先说明几个名词: CDC 是MFC对Wind32 API的设备上下文(DC)进行封装的C++类,由他继承的类包括 CPaintDC(常用)CWindowDC(现在软件基本不用) CClientDC( ...
- java nio使用方法(转)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...
- mysql---整体备份和增量备份
整体备份: 对整张表或者整个数据库甚至所有数据库进行备份. 增量备份: 对某一范围内的数据进行备份. 1.整体备份: 对表进行备份: 针对存储引擎为myisam的表,可以直接复制frm.myd.myi ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- 如何使用ERStudio 生成comment
在ER使用中,在生成sql过程中,如何批量生成字段描述,如何批量添加Owner,请看下文: 1.ER生成字段描述 2.ER生成描述添加Owner 使用的ER版本是8.0,英文版本,在操作过程中,有些配 ...
- 会话控制:cookie和session基础学习笔记
在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 我们可以简单理解为浏览器的开关. 其实对cookie和session也是主要为curd操作 coo ...
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- CentOS挂载新硬盘
1.查看当前硬盘使用状况: df -h root@VM_160_34_centos:~> df -h Filesystem Size Used Avail Use% Mounted on /de ...
- java.util.List
/* * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...
- Codeforces 258 Div2
A题,n*m根木棍,相交放置,轮流取走相交的两根,最后谁不能行动,则输掉. min(n,m)&1 为1则先取者赢. B题,给定一个长度为n,且各不相同的数组,问能否通过交换连续一段L....R ...