`
残缺的完美
  • 浏览: 42793 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用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 只是跑了个例子,打算摸索下抓取阿里巴巴的企业信息看看效果怎么样,到时候发出来给大家分享!

2
0
分享到:
评论
4 楼 wzpwork 2008-12-09  
谢谢楼主,我也写了一个这样的爬虫,但被阿里给终止了,直接返回找不到页面的信息给我.

3 楼 leeqianjun 2008-11-09  
网络爬虫web Harvest 比较不错,扩展性非常好,只不过相应的处理的时间比较长一点,没有通过HTMLPARSER 速度快。
2 楼 sdh5724 2008-11-08  
最受不了的是写爬虫。 不控制速度的程序员。
每天系统要自动屏蔽很多这样的爬虫。
有些爬虫直接就是放几千连接过来抓数据, 结果导致系统压力升高, 不得不终止他的行为
1 楼 yushan 2008-11-08  
楼主很强悍啊 

相关推荐

    java利用htmlparser抓取网页数据

    以下是一个简单的示例,展示了如何使用HTMLParser抓取网页的标题: ```java import org.htmlparser.Parser; import org.htmlparser.util.NodeIterator; import org.htmlparser.util.ParserException; import org....

    htmlparser抓取网页内容

    本项目以"htmlparser抓取网页内容"为主题,具体实践了如何利用HTMLParser库来从国家专利局的网站上抓取专利状态信息。 首先,我们要理解HTMLParser的工作原理。HTMLParser是Python的内置库,它提供了一个基础的事件...

    htmlparser抓取论坛帖子内容的代码

    本篇将详细讲解如何使用HTMLParser来抓取论坛帖子的内容。 首先,我们需要了解HTMLParser的基本使用。HTMLParser遵循事件驱动的模式,它会解析HTML文档并触发一系列的事件,如开始标签、结束标签、文本内容等。...

    htmlparser实现从网页上抓取数据.doc

    本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中可以看出,这是一个简单的Java程序,用于从指定的URL抓取HTML内容并将其保存到本地文件。这个程序的...

    htmlparser实现网页上抓取数据

    假设我们要从网页上的表格中抓取数据,可以监听`&lt;tr&gt;`和`&lt;td&gt;`标签。在`handle_starttag()`和`handle_endtag()`中,我们可以记录当前的嵌套层级,并在`handle_data()`中根据层级提取表格内的数据。 4. **配合...

    htmlparser实现从网页上抓取数据.pdf

    在"htmlparser实现从网页上抓取数据.pdf"这份文档中,可能会详细讲解如何使用HTMLParser来高效、准确地抓取网页上的目标数据。 1. **HTMLParser简介**:HTMLParser是一个轻量级的解析器,它能够解析HTML文档并将其...

    Htmlparser 网页内容抓取java

    以下是对HTMLParser及其应用的详细介绍。 首先,HTMLParser提供了对HTML文档的解析功能,它能够识别HTML标签、属性、文本内容等元素,并将其转化为易于处理的数据结构。在Java实例中,开发者可以使用HTMLParser的...

    HTMLParser 使用举例

    HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...

    Java使用HtmlParser实现简单的网络爬虫

    这里我们使用了HtmlParser库,它是一个开源的Java库,专门用于解析HTML文档,提取和处理网页上的信息。以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析...

    htmlparser实现从网页上抓取数据doc

    在提供的代码示例中,`ScrubSelectedWeb` 类展示了如何使用HTMLParser库来从指定的URL抓取网页内容并将其保存到本地文件。以下是一些关键点的详细说明: 1. **URL对象**:首先创建一个`URL`对象,它代表要抓取的...

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

    本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...

    htmlparser库与教程

    "htmlparser实现从网页上抓取数据.doc"文件则很可能是一个详细的教程,指导用户如何利用HTMLParser库进行网页数据抓取。在这个教程中,可能会涵盖以下关键知识点: 1. **安装和引入HTMLParser**:首先,用户需要将...

    htmlparser实现从网页上抓取数据(+例子)

    本教程将通过实例来讲解如何使用HTMLParser从网页上抓取数据,并简要提及Java解析XML的方法。 首先,我们需要了解HTMLParser的基本工作原理。HTMLParser遵循事件驱动的模型,它会逐行读取HTML源代码,遇到特定的...

    JAVA htmlparser 使用实例

    ### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...

    htmlparser 资料集合

    `htmlparser实现从网页上抓取数据.doc`文档可能包含了一个实际的案例,演示了如何使用HTMLParser从网页抓取特定信息。这种例子通常会涵盖如何创建解析器实例、注册事件处理器(如`SimpleHTMLHandler`),以及如何...

    HtmlParser

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

Global site tag (gtag.js) - Google Analytics