- 浏览: 42793 次
- 性别:
- 来自: 上海
最新评论
-
pengtyao:
兄弟能传一份word原始版到附件么,谢谢
jira插件开发学习 -
suifeng:
多谢, 藏之.
Oracle8i中使用Java语言来开发存储过程 -
wzpwork:
谢谢楼主,我也写了一个这样的爬虫,但被阿里给终止了,直接返回找 ...
使用htmlparser抓取阿里巴巴上宁波企业的详细资料 -
leeqianjun:
网络爬虫web Harvest 比较不错,扩展性非常好,只不过 ...
使用htmlparser抓取阿里巴巴上宁波企业的详细资料 -
sdh5724:
最受不了的是写爬虫。 不控制速度的程序员。 每天系统要自动屏蔽 ...
使用htmlparser抓取阿里巴巴上宁波企业的详细资料
最近无聊,写个小程序抓取阿里巴巴企业的详细信息,用htmlparser解析.
不多说了,直接上代码;
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.TagNameFilter; public class TestYehoo { public static void main(String[] args) throws Exception { int from = 488; int to = 500; String resource = "http://search.china.alibaba.com/search/company_search.htm?province=%D5%E3%BD%AD&city=%C4%FE%B2%A8&filt=y&begin_page="; getAlibabaCompanyInfo(resource,from,to); System.out.println("===================================="); } /** * 得到阿里巴巴企业信息 */ @SuppressWarnings("unchecked") public static void getAlibabaCompanyInfo(String content,int from,int to) throws Exception { for(int j=from-1;j<to;j++) { System.out.println("=========开始取第"+(j+1)+"页数据============="); List list = new ArrayList(); Parser myParser = new Parser(content+(j+1)); //过滤条件 NodeFilter aFilter = new TagNameFilter ("A"); NodeFilter classfilter_l = new HasAttributeFilter("class","l"); //解析公司名称和公司网址 AndFilter companyNameFilter = new AndFilter(); companyNameFilter.setPredicates(new NodeFilter[]{aFilter,classfilter_l}); Node[] nodes = myParser.parse(companyNameFilter).toNodeArray(); for(int i=0;i<nodes.length;i++){ QyxxDomain domain = new QyxxDomain(); Node anode = (Node) nodes[i]; int num = (j*30+i+1); // if("0".equals(countRecord(num))){ System.out.println(num); System.out.println("公司名:"+anode.toPlainTextString()); String text = anode.getText(); String website = text.substring(text.indexOf("href=\"")+6, text.indexOf("/\"")+1); System.out.println("网址:"+website); String url = website+"athena/companyprofile/"+website.substring(website.indexOf("http://")+7, website.indexOf(".cn.alibaba.com/"))+".html"; String url1 = website+"athena/contact/"+website.substring(website.indexOf("http://")+7, website.indexOf(".cn.alibaba.com/"))+".html"; domain.setQymc(anode.toPlainTextString().trim()); domain.setId(new Long(num).toString()); try{ getCompanyDetail(url,domain); }catch (Exception e) { System.out.println("取"+domain.getQymc()+"详细信息时发生错误!"); e.printStackTrace(); continue; } try{ getCompanyContact(url1,domain); }catch (Exception e) { System.out.println("取"+domain.getQymc()+"联系信息时发生错误!"); e.printStackTrace(); continue; } list.add(domain); // } } System.out.println("=========结束取第"+(j+1)+"页数据============="); System.out.println("=========开始插入第"+(j+1)+"页数据============="); doInsertDB(list); System.out.println("=========结束插入第"+(j+1)+"页数据============="); } } private static String countRecord(int id)throws Exception{ //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="root"; //数据库名 String dbName="qiyetong"; //表名 String tableName="qyxx"; //联结字符串 String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd; Class.forName(driverName).newInstance(); Connection connection=DriverManager.getConnection(url); Statement statement = connection.createStatement(); String sql = "select count(*) as count from qyxx where id="+id; ResultSet rs = statement.executeQuery(sql); String count=""; while(rs.next()){ count=rs.getString("count"); } return count; } @SuppressWarnings("unchecked") private static void doInsertDB(List list) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException { //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="root"; //数据库名 String dbName="qiyetong"; //表名 String tableName="qyxx"; //联结字符串 String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd; Class.forName(driverName).newInstance(); Connection connection=DriverManager.getConnection(url); Statement statement = connection.createStatement(); int succNum = 0; for(int k=0;k<list.size();k++) { try{ QyxxDomain domain = (QyxxDomain)list.get(k); String sql = "insert into qyxx(id,qymc,gsgk,zycphfw,zyhy,qylx,jyms,zczb,gszcd,ygrs,gsclsj,fddbr,zykh,nyye,zyyydd,zysc,khyh,yhzh,oem,zlkz,ncke,yfbmrs,cfmj,ycl,gszy,lxr,dh,yddh,cz,dz,yb)" + "VALUES(" +domain.getId()+",'"+ SQLFilter.filtrateSQL(domain.getQymc(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getGsgk(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZycphfw(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZyhy(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getQylx(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getJyms(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZczb(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getGszcd(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYgrs(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getGsclsj(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getFddbr(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZykh(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getNyye(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZyyydd(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZysc(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getKhyh(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYhzh(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getOem(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getZlkz(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getNcke(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYfbmrs(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getCfmj(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYcl(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getGszy(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getLxr(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getDh(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYddh(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getCz(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getDz(), 1)+"','"+ SQLFilter.filtrateSQL(domain.getYb(), 1)+"');"; System.out.println(sql); statement.execute(sql); succNum++; }catch (Exception e) { System.out.println("插入第"+k+"条信息时发生错误!"); continue; } } System.out.println("=========成功插入"+succNum+"条数据============="); } /** * 得到企业详细信息 */ public static void getCompanyDetail(String content,QyxxDomain domain) throws Exception { Parser myParser = new Parser(content); Parser myParser1 = new Parser(content); //过滤条件 NodeFilter divFilter = new TagNameFilter ("DIV"); NodeFilter tdFilter = new TagNameFilter ("TD"); NodeFilter classfilter_companyinfo = new HasAttributeFilter("class","companyinfo mainTextColor"); NodeFilter classfilter_Slh15 = new HasAttributeFilter("class","S lh15"); //解析公司概况 AndFilter detailFilter1 = new AndFilter(); detailFilter1.setPredicates(new NodeFilter[]{divFilter,classfilter_companyinfo}); Node[] nodes1 = myParser1.parse(detailFilter1).toNodeArray(); for(int i=0;i<nodes1.length;i++){ Node anode = (Node) nodes1[i]; String gsgk = ""; try{ gsgk = splitAndFilterString(anode.getChildren().toNodeArray()[6].toPlainTextString()); }catch (Exception e) { gsgk = ""; } domain.setGsgk(gsgk); System.out.println(domain.getGsgk()); } //解析公司详细资料 AndFilter detailFilter = new AndFilter(); detailFilter.setPredicates(new NodeFilter[]{tdFilter,classfilter_Slh15}); Node[] nodes = myParser.parse(detailFilter).toNodeArray(); for(int i=0;i<nodes.length;i++){ Node anode = (Node) nodes[i]; if(anode.toPlainTextString().indexOf("主营产品或服务")!=-1){ domain.setZycphfw(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("主营产品或服务:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("主营行业")!=-1){ domain.setZyhy(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("主营行业:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("企业类型")!=-1){ domain.setQylx(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("企业类型:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("经营模式")!=-1){ domain.setJyms(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("经营模式:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("注册资本")!=-1){ domain.setZczb(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("注册资本:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("公司注册地")!=-1){ domain.setGszcd(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("公司注册地:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("员工人数")!=-1){ domain.setYgrs(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("员工人数:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("公司成立时间")!=-1){ domain.setGsclsj(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("公司成立时间:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("法定代表人/负责人")!=-1){ domain.setFddbr(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("法定代表人/负责人:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("主要客户")!=-1){ domain.setZykh(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("主要客户:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("年营业额")!=-1){ domain.setNyye(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("年营业额:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("主要经营地点")!=-1){ domain.setZyyydd(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("主要经营地点:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("主要市场")!=-1){ domain.setZysc(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("主要市场:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("开户银行")!=-1){ domain.setKhyh(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("开户银行:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("银行帐号")!=-1){ domain.setYhzh(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("银行帐号:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("是否提供OEM代加工")!=-1){ domain.setOem(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("是否提供OEM代加工:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("质量控制")!=-1){ domain.setZlkz(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("质量控制:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("年出口额")!=-1){ domain.setNcke(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("年出口额:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("研发部门人数")!=-1){ domain.setYfbmrs(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("研发部门人数:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("厂房面积")!=-1){ domain.setCfmj(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("厂房面积:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("月产量")!=-1){ domain.setYcl(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("月产量:"+((Node) nodes[i+1]).toPlainTextString()); } if(anode.toPlainTextString().indexOf("公司主页")!=-1){ domain.setGszy(splitAndFilterString(((Node) nodes[i+1]).toPlainTextString())); //System.out.println("公司主页:"+((Node) nodes[i+1]).toPlainTextString()); } } } /** * 得到企业详细信息 */ public static void getCompanyContact(String content,QyxxDomain domain) throws Exception { Parser myParser = new Parser(content); Parser myParser1 = new Parser(content); //过滤条件 NodeFilter divFilter = new TagNameFilter ("DIV"); NodeFilter liFilter = new TagNameFilter ("LI"); NodeFilter classfilter_companyinfo = new HasAttributeFilter("class","title ml15 b mb20 mt20 mainTextColor"); //解析联系人 AndFilter detailFilter1 = new AndFilter(); detailFilter1.setPredicates(new NodeFilter[]{divFilter,classfilter_companyinfo}); Node[] nodes1 = myParser1.parse(detailFilter1).toNodeArray(); for(int i=0;i<nodes1.length;i++){ Node anode = (Node) nodes1[i]; domain.setLxr(splitAndFilterString(anode.getChildren().toNodeArray()[1].toPlainTextString())+splitAndFilterString(anode.getChildren().toNodeArray()[2].toPlainTextString())); //System.out.println(domain.getLxr()); } //解析联系方式 Node[] nodes = myParser.parse(liFilter).toNodeArray(); for(int i=0;i<nodes.length;i++){ Node anode = (Node) nodes[i]; if(anode.toPlainTextString().indexOf("电 话")!=-1){ domain.setDh(splitAndFilterString(anode.toPlainTextString()).substring(3)); //System.out.println(splitAndFilterString(anode.toPlainTextString()).substring(3)); } if(anode.toPlainTextString().indexOf("移动电话")!=-1){ domain.setYddh(splitAndFilterString(anode.toPlainTextString()).substring(5)); //System.out.println(splitAndFilterString(anode.toPlainTextString()).substring(5)); } if(anode.toPlainTextString().indexOf("传 真")!=-1){ domain.setCz(splitAndFilterString(anode.toPlainTextString()).substring(3)); //System.out.println(splitAndFilterString(anode.toPlainTextString()).substring(3)); } if(anode.toPlainTextString().indexOf("地 址")!=-1){ domain.setDz(splitAndFilterString(anode.toPlainTextString()).substring(3)); //System.out.println(splitAndFilterString(anode.toPlainTextString()).substring(3)); } if(anode.toPlainTextString().indexOf("邮 编")!=-1){ domain.setYb(splitAndFilterString(anode.toPlainTextString()).substring(3)); //System.out.println(splitAndFilterString(anode.toPlainTextString()).substring(3)); } } } /** * 读取一个文件到字符串里. * * @param sFileName 文件名 * @param sEncode String * @return 文件内容 */ public static String readTextFile(String sFileName, String sEncode) { StringBuffer sbStr = new StringBuffer(); try { File ff = new File(sFileName); InputStreamReader read = new InputStreamReader(new FileInputStream(ff), sEncode); BufferedReader ins = new BufferedReader(read); String dataLine = ""; while (null != (dataLine = ins.readLine())) { sbStr.append(dataLine); sbStr.append("\r\n"); } ins.close(); } catch (Exception e) { e.printStackTrace(); } return sbStr.toString(); } /** * 去掉左右空格后字符串是否为空 * @param astr String * @return boolean */ public static boolean isTrimEmpty(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } if (isBlank(astr.trim())) { return true; } return false; } /** * 字符串是否为空:null或者长度为0. * @param astr 源字符串. * @return boolean */ public static boolean isBlank(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } else { return false; } } /** * 删除input字符串中的html格式 * * @param input * @param length * @return */ public static String splitAndFilterString(String input) { if (input == null || input.trim().equals("")) { return ""; } // 去掉所有html元素, String str = input.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll( "<[^>]*>", ""); str = str.replaceAll("[(/>)<]", ""); str = str.replaceAll(" ", ""); str = str.replaceAll("\\r", ""); str = str.replaceAll("\\n", ""); str = str.replaceAll("\\t", ""); return str; }
最近找了个网络爬虫web Harvest 只是跑了个例子,打算摸索下抓取阿里巴巴的企业信息看看效果怎么样,到时候发出来给大家分享!
- HTML_Parser_1.5.zip (4.1 MB)
- 下载次数: 237
评论
4 楼
wzpwork
2008-12-09
谢谢楼主,我也写了一个这样的爬虫,但被阿里给终止了,直接返回找不到页面的信息给我.
3 楼
leeqianjun
2008-11-09
网络爬虫web Harvest 比较不错,扩展性非常好,只不过相应的处理的时间比较长一点,没有通过HTMLPARSER 速度快。
2 楼
sdh5724
2008-11-08
最受不了的是写爬虫。 不控制速度的程序员。
每天系统要自动屏蔽很多这样的爬虫。
有些爬虫直接就是放几千连接过来抓数据, 结果导致系统压力升高, 不得不终止他的行为
每天系统要自动屏蔽很多这样的爬虫。
有些爬虫直接就是放几千连接过来抓数据, 结果导致系统压力升高, 不得不终止他的行为
1 楼
yushan
2008-11-08
楼主很强悍啊
发表评论
-
使用 CAS 在 Tomcat 中实现单点登录(转载)
2010-03-29 13:37 1181使用 CAS 在 Tomcat 中实现单点登录 ... -
结合Apache和Tomcat实现集群和负载均衡
2008-11-02 10:53 2084本文基本参考自 轻松实现Apache,Tomcat集群和负载均 ... -
Oracle8i中使用Java语言来开发存储过程
2008-11-02 10:49 1749在Oracle8i之前,开发人 ... -
Hibernate3调用存储过程用法
2008-11-02 10:43 2592直接以一个例子在说明,如DB2中有一个简单存储过程 selec ... -
Lucene 索引数据库
2008-10-30 16:49 1386Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索, ... -
2008年中 My Favorite Java Site
2008-10-29 12:56 10122008年中 My Favorite Java Site ... -
Maven的基本原理和Maven2的新特性
2007-09-06 14:00 4978用Maven做项目管理 在Java世界中我们很多的开发人员选择 ... -
maven的使用
2007-09-06 11:36 1852一、前言 早就知道maven 在java 项目 ... -
使用Maven管理Eclipse Java项目(转载)
2007-09-06 09:44 2488为什么要使用Maven,使用Maven有什么好处 maven ...
相关推荐
以下是一个简单的示例,展示了如何使用HTMLParser抓取网页的标题: ```java import org.htmlparser.Parser; import org.htmlparser.util.NodeIterator; import org.htmlparser.util.ParserException; import org....
本项目以"htmlparser抓取网页内容"为主题,具体实践了如何利用HTMLParser库来从国家专利局的网站上抓取专利状态信息。 首先,我们要理解HTMLParser的工作原理。HTMLParser是Python的内置库,它提供了一个基础的事件...
本篇将详细讲解如何使用HTMLParser来抓取论坛帖子的内容。 首先,我们需要了解HTMLParser的基本使用。HTMLParser遵循事件驱动的模式,它会解析HTML文档并触发一系列的事件,如开始标签、结束标签、文本内容等。...
本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中可以看出,这是一个简单的Java程序,用于从指定的URL抓取HTML内容并将其保存到本地文件。这个程序的...
假设我们要从网页上的表格中抓取数据,可以监听`<tr>`和`<td>`标签。在`handle_starttag()`和`handle_endtag()`中,我们可以记录当前的嵌套层级,并在`handle_data()`中根据层级提取表格内的数据。 4. **配合...
在"htmlparser实现从网页上抓取数据.pdf"这份文档中,可能会详细讲解如何使用HTMLParser来高效、准确地抓取网页上的目标数据。 1. **HTMLParser简介**:HTMLParser是一个轻量级的解析器,它能够解析HTML文档并将其...
以下是对HTMLParser及其应用的详细介绍。 首先,HTMLParser提供了对HTML文档的解析功能,它能够识别HTML标签、属性、文本内容等元素,并将其转化为易于处理的数据结构。在Java实例中,开发者可以使用HTMLParser的...
HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...
这里我们使用了HtmlParser库,它是一个开源的Java库,专门用于解析HTML文档,提取和处理网页上的信息。以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析...
在提供的代码示例中,`ScrubSelectedWeb` 类展示了如何使用HTMLParser库来从指定的URL抓取网页内容并将其保存到本地文件。以下是一些关键点的详细说明: 1. **URL对象**:首先创建一个`URL`对象,它代表要抓取的...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
"htmlparser实现从网页上抓取数据.doc"文件则很可能是一个详细的教程,指导用户如何利用HTMLParser库进行网页数据抓取。在这个教程中,可能会涵盖以下关键知识点: 1. **安装和引入HTMLParser**:首先,用户需要将...
本教程将通过实例来讲解如何使用HTMLParser从网页上抓取数据,并简要提及Java解析XML的方法。 首先,我们需要了解HTMLParser的基本工作原理。HTMLParser遵循事件驱动的模型,它会逐行读取HTML源代码,遇到特定的...
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
`htmlparser实现从网页上抓取数据.doc`文档可能包含了一个实际的案例,演示了如何使用HTMLParser从网页抓取特定信息。这种例子通常会涵盖如何创建解析器实例、注册事件处理器(如`SimpleHTMLHandler`),以及如何...
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...