何以解憂?唯有Java

          其實程序員也懂得浪漫!
          posts - 90, comments - 637, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          用HtmlParser 寫個簡單的 news爬蟲

          Posted on 2009-05-20 12:44 guanminglin@gmail.com 閱讀(39844) 評論(61)  編輯  收藏 所屬分類: JavaSEJavaEE
              有一段時間沒寫博客了,這幾天回到學校我同學要趕著交畢業設計,讓我幫他寫個爬蟲,專門抓搜狐的新聞,我用過爬蟲,但是從來沒有自己寫過爬蟲,于是Google了一下,找到了一篇不錯的文章:使用 HttpClient 和 HtmlParser 實現簡易爬蟲 .  參考里面的代碼,自己寫了個簡易的搜狐新聞爬蟲。

              爬蟲的主要工做就是到搜狐的新聞首頁上去抓取新聞,然后將新聞添加到數據庫中。
          代碼其實很簡單的:
          LinkParser.java
          import com.sohu.SohuNews;
          import java.util.HashSet;
          import java.util.Set;
          import org.htmlparser.Node;
          import org.htmlparser.NodeFilter;
          import org.htmlparser.Parser;
          import org.htmlparser.filters.NodeClassFilter;
          import org.htmlparser.filters.OrFilter;
          import org.htmlparser.tags.LinkTag;
          import org.htmlparser.util.NodeList;
          import org.htmlparser.util.ParserException;

          /**
           *  這個類是用來搜集新聞鏈接地址的。將符合正則表達式的URL添加到URL數組中。
           * 
          @author guanminglin
           
          */
          public class LinkParser {
              
          // 獲取一個網站上的鏈接,filter 用來過濾鏈接

              
          public static Set<String> extracLinks(String url, LinkFilter filter) {

                  Set
          <String> links = new HashSet<String>();
                  
          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> 標簽,和 <frame> 標簽
                      OrFilter linkFilter = new OrFilter(new NodeClassFilter(
                              LinkTag.
          class), 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
                              if (filter.accept(linkUrl)) {
                                  links.add(linkUrl);
                              }
                          } 
          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(">");
                              }
                              String frameUrl 
          = frame.substring(5, end - 1);
                              
          if (filter.accept(frameUrl)) {
                                  links.add(frameUrl);
                              }
                          }
                      }
                  } 
          catch (ParserException e) {
                      e.printStackTrace();
                  }
                  
          return links;
              }

              
          public void doParser(String url) {
                  SohuNews news 
          = new SohuNews();
                  Set
          <String> links = LinkParser.extracLinks(
                          url, 
          new LinkFilter() {
                      
          //提取以 http://news.sohu.com 開頭的鏈接

                      
          public boolean accept(String url) {
                          
          if (url.matches("http://news.sohu.com/[\\d]+/n[\\d]+.shtml")) {
                              
          return true;
                          } 
          else {
                              
          return false;
                          }
                      }
                  });
                  
          //循環迭代出連接,然后提取該連接中的新聞。
                  for (String link : links) {
                      System.out.println(link);
                      news.parser(link); 
          //解析連接
                      
                  }
              }

              
          //測試主頁新聞,可以得到主頁上所有符合要求的網頁地址,并進行訪問。
              public static void main(String[] args) {
                  String url 
          = "http://news.sohu.com/";
                  LinkParser parser 
          = new LinkParser();
                  parser.doParser(url);

              }
          }

          上面這段帶碼比較簡單,就是用來提取 http://news.sohu.com  上面的新聞連接 ,格式類似這樣:http://news.sohu.com/20090518/n264012864.shtml
          所以寫了一小段的正則表達式來匹配他:
          Set<String> links = LinkParser.extracLinks(
                          url, 
          new LinkFilter() {
                      
          //提取以 http://news.sohu.com 開頭的鏈接

                      
          public boolean accept(String url) {
                          
          if (url.matches("http://news.sohu.com/[\\d]+/n[\\d]+.shtml")) {
                              
          return true;
                          } 
          else {
                              
          return false;
                          }
                      }
                  });

          還有一個核心類就是用來解析搜狐新聞的類,該類用于重網頁中提取出新聞,然后將新聞添加到數據庫中。代碼中還用到了一個NewsBean
          這段代碼就不貼出來了,很簡單的POJO 代碼。核心代碼都在下面。
          SohuNews.java
          import com.sohu.bean.NewsBean;
          import com.sohu.db.ConnectionManager;
          import java.util.ArrayList;
          import java.util.List;
          import java.util.logging.Level;
          import java.util.logging.Logger;
          import org.htmlparser.NodeFilter;
          import org.htmlparser.Parser;
          import org.htmlparser.beans.StringBean;
          import org.htmlparser.filters.AndFilter;
          import org.htmlparser.filters.HasAttributeFilter;
          import org.htmlparser.filters.TagNameFilter;
          import org.htmlparser.tags.Div;
          import org.htmlparser.tags.HeadingTag;
          import org.htmlparser.tags.Span;
          import org.htmlparser.util.NodeList;
          import org.htmlparser.util.ParserException;

          import java.sql.PreparedStatement;
          import java.sql.SQLException;

          /**
           * 用于對搜狐網站上的新聞進行抓取
           * 
          @author guanminglin <guanminglin@gmail.com>
           
          */
          public class SohuNews {

              
          private Parser parser = null;   //用于分析網頁的分析器。
              private List newsList = new ArrayList();    //暫存新聞的List;
              private NewsBean bean = new NewsBean();
              
          private ConnectionManager manager = null;    //數據庫連接管理器。
              private PreparedStatement pstmt = null;

              
          public SohuNews() {
              }

              
          /**
               * 獲得一條完整的新聞。
               * 
          @param newsBean
               * 
          @return
               
          */
              
          public List getNewsList(final NewsBean newsBean) {
                  List list 
          = new ArrayList();
                  String newstitle 
          = newsBean.getNewsTitle();
                  String newsauthor 
          = newsBean.getNewsAuthor();
                  String newscontent 
          = newsBean.getNewsContent();
                  String newsdate 
          = newsBean.getNewsDate();
                  list.add(newstitle);
                  list.add(newsauthor);
                  list.add(newscontent);
                  list.add(newsdate);
                  
          return list;
              }

              
          /**
               *  設置新聞對象,讓新聞對象里有新聞數據
               * 
          @param newsTitle 新聞標題
               * 
          @param newsauthor  新聞作者
               * 
          @param newsContent 新聞內容
               * 
          @param newsDate  新聞日期
               * 
          @param url  新聞鏈接
               
          */
              
          public void setNews(String newsTitle, String newsauthor, String newsContent, String newsDate, String url) {
                  bean.setNewsTitle(newsTitle);
                  bean.setNewsAuthor(newsauthor);
                  bean.setNewsContent(newsContent);
                  bean.setNewsDate(newsDate);
                  bean.setNewsURL(url);
              }

              
          /**
               * 該方法用于將新聞添加到數據庫中。
               
          */
              
          protected void newsToDataBase() {

                  
          //建立一個線程用來執行將新聞插入到數據庫中。
                  Thread thread = new Thread(new Runnable() {

                      
          public void run() {
                          
          boolean sucess = saveToDB(bean);
                          
          if (sucess != false) {
                              System.out.println(
          "插入數據失敗");
                          }
                      }
                  });
                  thread.start();
              }

              
          /**
               * 將新聞插入到數據庫中
               * 
          @param bean
               * 
          @return
               
          */
              
          public boolean saveToDB(NewsBean bean) {
                  
          boolean flag = true;
                  String sql 
          = "insert into news(newstitle,newsauthor,newscontent,newsurl,newsdate) values(?,?,?,?,?)";
                  manager 
          = new ConnectionManager();
                  String titleLength 
          = bean.getNewsTitle();
                  
          if (titleLength.length() > 60) {  //標題太長的新聞不要。
                      return flag;
                  }
                  
          try {
                      pstmt 
          = manager.getConnection().prepareStatement(sql);
                      pstmt.setString(
          1, bean.getNewsTitle());
                      pstmt.setString(
          2, bean.getNewsAuthor());
                      pstmt.setString(
          3, bean.getNewsContent());
                      pstmt.setString(
          4, bean.getNewsURL());
                      pstmt.setString(
          5, bean.getNewsDate());
                      flag 
          = pstmt.execute();

                  } 
          catch (SQLException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  } 
          finally {
                      
          try {
                          pstmt.close();
                          manager.close();
                      } 
          catch (SQLException ex) {
                          Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                      }

                  }
                  
          return flag;
              }

              
          /**
               * 獲得新聞的標題
               * 
          @param titleFilter
               * 
          @param parser
               * 
          @return
               
          */
              
          private String getTitle(NodeFilter titleFilter, Parser parser) {
                  String titleName 
          = "";
                  
          try {

                      NodeList titleNodeList 
          = (NodeList) parser.parse(titleFilter);
                      
          for (int i = 0; i < titleNodeList.size(); i++) {
                          HeadingTag title 
          = (HeadingTag) titleNodeList.elementAt(i);
                          titleName 
          = title.getStringText();
                      }

                  } 
          catch (ParserException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  }
                  
          return titleName;
              }

              
          /**
               * 獲得新聞的責任編輯,也就是作者。
               * 
          @param newsauthorFilter
               * 
          @param parser
               * 
          @return
               
          */
              
          private String getNewsAuthor(NodeFilter newsauthorFilter, Parser parser) {
                  String newsAuthor 
          = "";
                  
          try {
                      NodeList authorList 
          = (NodeList) parser.parse(newsauthorFilter);
                      
          for (int i = 0; i < authorList.size(); i++) {
                          Div authorSpan 
          = (Div) authorList.elementAt(i);
                          newsAuthor 
          = authorSpan.getStringText();
                      }

                  } 
          catch (ParserException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  }
                  
          return newsAuthor;

              }

              
          /*
               * 獲得新聞的日期
               
          */
              
          private String getNewsDate(NodeFilter dateFilter, Parser parser) {
                  String newsDate 
          = null;
                  
          try {
                      NodeList dateList 
          = (NodeList) parser.parse(dateFilter);
                      
          for (int i = 0; i < dateList.size(); i++) {
                          Span dateTag 
          = (Span) dateList.elementAt(i);
                          newsDate 
          = dateTag.getStringText();
                      }
                  } 
          catch (ParserException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  }

                  
          return newsDate;
              }

              
          /**
               * 獲取新聞的內容
               * 
          @param newsContentFilter
               * 
          @param parser
               * 
          @return  content 新聞內容
               
          */
              
          private String getNewsContent(NodeFilter newsContentFilter, Parser parser) {
                  String content 
          = null;
                  StringBuilder builder 
          = new StringBuilder();


                  
          try {
                      NodeList newsContentList 
          = (NodeList) parser.parse(newsContentFilter);
                      
          for (int i = 0; i < newsContentList.size(); i++) {
                          Div newsContenTag 
          = (Div) newsContentList.elementAt(i);
                          builder 
          = builder.append(newsContenTag.getStringText());
                      }
                      content 
          = builder.toString();  //轉換為String 類型。
                      if (content != null) {
                          parser.reset();
                          parser 
          = Parser.createParser(content, "gb2312");
                          StringBean sb 
          = new StringBean();
                          sb.setCollapse(
          true);
                          parser.visitAllNodesWith(sb);
                          content 
          = sb.getStrings();
          //                String s = "\";} else{ document.getElementById('TurnAD444').innerHTML = \"\";} } showTurnAD444(intTurnAD444); }catch(e){}";
                         
                          content 
          = content.replaceAll("\\\".*[a-z].*\\}""");
                       
                          content 
          = content.replace("[我來說兩句]""");


                      } 
          else {
                         System.out.println(
          "沒有得到新聞內容!");
                      }

                  } 
          catch (ParserException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  }

                  
          return content;
              }

              
          /**
               * 根據提供的URL,獲取此URL對應網頁所有的純文本信息,次方法得到的信息不是很純,
               *常常會得到我們不想要的數據。不過如果你只是想得到某個URL 里的所有純文本信息,該方法還是很好用的。
               * 
          @param url 提供的URL鏈接
               * 
          @return RL對應網頁的純文本信息
               * 
          @throws ParserException
               * 
          @deprecated 該方法被 getNewsContent()替代。
               
          */
              @Deprecated
              
          public String getText(String url) throws ParserException {
                  StringBean sb 
          = new StringBean();

                  
          //設置不需要得到頁面所包含的鏈接信息
                  sb.setLinks(false);
                  
          //設置將不間斷空格由正規空格所替代
                  sb.setReplaceNonBreakingSpaces(true);
                  
          //設置將一序列空格由一個單一空格所代替
                  sb.setCollapse(true);
                  
          //傳入要解析的URL
                  sb.setURL(url);

                  
          //返回解析后的網頁純文本信息
                  return sb.getStrings();
              }

              
          /**
               * 對新聞URL進行解析提取新聞,同時將新聞插入到數據庫中。
               * 
          @param content
               
          */
              
          public void parser(String url) {
                  
          try {
                      parser 
          = new Parser(url);
                      NodeFilter titleFilter 
          = new TagNameFilter("h1");
                      NodeFilter contentFilter 
          = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id""sohu_content"));
                      NodeFilter newsdateFilter 
          = new AndFilter(new TagNameFilter("span"), new HasAttributeFilter("class""c"));
                      NodeFilter newsauthorFilter 
          = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("class""editUsr"));
                      String newsTitle 
          = getTitle(titleFilter, parser);
                      parser.reset();   
          //記得每次用完parser后,要重置一次parser。要不然就得不到我們想要的內容了。
                      String newsContent = getNewsContent(contentFilter, parser);
                      System.out.println(newsContent);   
          //輸出新聞的內容,查看是否符合要求
                      parser.reset();
                      String newsDate 
          = getNewsDate(newsdateFilter, parser);
                      parser.reset();
                      String newsauthor 
          = getNewsAuthor(newsauthorFilter, parser);

                      
          //先設置新聞對象,讓新聞對象里有新聞內容。
                      setN             ews(newsTitle, newsauthor, newsContent, newsDate, url);
          //將新聞添加到數據中。
                      this.newsToDataBase();
                      
                  } 
          catch (ParserException ex) {
                      Logger.getLogger(SohuNews.
          class.getName()).log(Level.SEVERE, null, ex);
                  }
              }

              
          //單個文件測試網頁
              public static void main(String[] args) {
                  SohuNews news 
          = new SohuNews();
                  news.parser(
          "http://news.sohu.com/20090518/n264012864.shtml");   
              }
          }

          存放新聞的數據庫用的是MySql 建表語句如下:(其實不用數據庫也可以的,在SohuNews類中注釋掉那行紅色的代碼就可以了,所有得到的新聞都會在后臺打印的。)

          CREATE DATABASE IF NOT EXISTS sohunews;
          USE sohunews;

          --
          --
           Definition of table `news`
          --

          DROP TABLE IF EXISTS `news`;
          CREATE TABLE `news` (
            `newsid` 
          int(11NOT NULL auto_increment,
            `newstitle` 
          varchar(60NOT NULL,
            `newsauthor` 
          varchar(20NOT NULL,
            `newscontent` 
          text NOT NULL,
            `newsurl` 
          char(130NOT NULL,
            `newsdate` 
          varchar(24NOT NULL,
            
          PRIMARY KEY  (`newsid`)
          ) ENGINE
          =InnoDB  DEFAULT CHARSET=utf8;

          以上的代碼寫的很粗糙,項目中使用到了HtmlParser工具包,如果需要可以到http://sourceforge.net/projects/htmlparser 網站上下載。如果有需要這個

          這篇文章只是一篇拋磚引玉的文章,希望懂爬蟲的你能夠給點意見,大家交流交流!!

          項目源代碼SohuNews



          評論

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 13:35 by andyelvis
          能否將這個爬蟲項目的源碼發給我學習學習?我的email是mrjiangyun@gmail.com。謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 14:57 by 小饒
          能否將這個爬蟲項目的源碼發給我學習?maikelsong@163.com。謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 17:30 by 咖啡@可樂
          能否將這個爬蟲項目的源碼發給我學習?anzn20@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 17:45 by 高人啊
          高人,jerryhu2002@163.com,非常感謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 17:54 by 中原
          大哥,soade@foxmail.com,謝謝!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-20 18:06 by kalman03
          能否發一份到kalman03@163.com,謝謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-20 19:55 by wayne
          也發我一份 junjun231953@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 08:49 by QQ2009
          老兄給我一份啊,學習了!
          unwm@tom.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 08:51 by 用HtmlParser 寫個簡單的 news爬蟲
          謝謝!xhfptu@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 08:57 by cjf
          能否也經我一份啊——abc_cjf@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 09:09 by wangyuqiang
          也給我發一份,謝謝!wangcll@yeah.net

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 09:29 by sea2009
          麻煩大哥給我發一份,謝謝2000_sea@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-21 09:52 by june

          大哥,寫很不錯,能否把這個爬蟲項目的源碼發給我學習?
          本人的郵箱是:125_feiying@163.com
          謝謝!

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-21 10:48 by jerry
          能否將這個爬蟲項目的源碼發給我學習學習?我的email是yanbeifei168@163.com。謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 11:01 by 日月雨林@gmail.com
          朋友們,項目源碼已近發送到你們的郵箱當中了。請注意查收!!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 11:08 by mao
          3100949@qq.com
          能否把這個爬蟲項目的源碼發給我學習?

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 11:09 by nmgmax
          謝謝!nmgmax@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 11:29 by seesea
          謝謝weishugui@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-21 11:40 by yang
          Thank you !!!

          yxxcrtd@qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 11:46 by 日月雨林@gmail.com
          @mao
          @nmgmax
          @seesea
          @yang
          項目源碼已近發送到你們的郵箱當中了。請注意查收!!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 12:23 by RainYuan
          yuanyuan110.l@gmail.com
          能否把這個爬蟲項目的源碼發給我學習?

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 13:05 by liuze
          老兄,能否給我發一份爬蟲代碼嗎?我的郵箱:liuze@msn.com,謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-21 13:06 by yang
          已經收到,謝謝!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 13:11 by yuhao
          大哥,也給我發一份吧:
          helloyuhao@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 13:15 by 幽界幻想
          大哥,給一份吧
          lovellj2002@163.com

          先謝謝了.

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 15:40 by 油荒
          給小弟也發一份吧、
          formulawang@yahoo.com.cn
          先謝過了

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 15:45 by 路過的小蝦
          我也想要一份,jiao_bo21@sina.com,謝謝老兄!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 16:06 by liu0909
          謝謝了,liu_0909@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-21 17:36 by jefyjiang
          jefyjiang@hotmail.com發我一份學習一下,謝謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 10:36 by first_learner
          tomcat@yeah.net
          謝謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 14:41 by ccbobo
          ccbobocat@gmail.com
          謝謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-05-22 15:45 by lala
          寫的不錯,希望老兄可以的話,能夠發一份給我,
          一直想研究爬蟲呢,真是懶啊,O(∩_∩)O哈哈~
          guofangjia@shdv.com
          謝謝了

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 16:19 by ゞ沉默是金ゞ
          bhdxyjg@126.com,謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 16:26 by 日月雨林@gmail.com
          @lala
          大家共同交流!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 17:36 by 藏獒價格
          hai126@qq.com,我也想和大家交流哦..呵呵.

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 17:37 by 新開傳世私服
          老兄,能否給我發一份爬蟲代碼嗎?我的郵箱:lzhangq@msn.com,謝謝了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 17:38 by 傳世私服
          我也想要一份...123qq321@qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 17:39 by 魔獸世界私服
          我可以要一份嗎?182407555@qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 17:40 by 魔獸私服
          9755425202qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-22 20:25 by 一個任
          想研究下,麻煩樓主 發份給我。謝謝。
          huadiaoyue@yahoo.cn

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-23 11:14 by 日月雨林@gmail.com
          @新開傳世私服
          @傳世私服
          @魔獸私服
          請檢查你們地址是否真確,你們的郵件發送不了!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-23 22:23 by gengqkun
          想用一下這個爬蟲,gengqkun@yahoo.com.cn.
          多謝!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-24 20:13 by 不錯不錯
          多謝多謝,請順道發我一份pcccit@qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-24 23:35 by java_faver
          想學習下這個爬蟲,496172717@qq.com
          謝謝!

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 00:16 by huagongxuezi
          也想看看這個。可否給我也發一份。zweihust@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 09:57 by pwp
          我也想要一份源碼 謝謝!
          fspwp0730@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 10:25 by 百年樹人
          同上,0_7734@163.com,謝謝~

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 12:10 by 打工妹
          謝謝了
          zeng_yixing@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 14:50 by wszcx
          謝謝了,我的郵箱是: wszcxli@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-25 21:45 by Love_JAVA
          很不錯啊,想學習學習,謝謝了!
          397655387@qq.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-26 05:09 by 孫程
          給我也弄一份學習學習吧.
          gensun.cc@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-26 14:23 by 南京的胖子
          給我一個啊 我來學習一下
          route_wu@hotmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-28 12:07 by Raf.
          哇 您好厲害哦
          看到他們都在索要這個項目,
          我可不可以也能得到一些榮幸呢?
          kenlhb@gmail.com
          謝謝

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-05-30 21:39 by kan
          也想看看這個。可否給我也發一份。你太牛了 崇拜 謝謝 kzq87@163.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-06-01 01:04 by kobe
          最近在學這個,因為要做課程設計,所以懇請樓主也發我一份,萬分感謝~
          bumengxin@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-06-04 00:30 by coolzw
          能不能發把項目代碼發到我的郵箱:
          jiangzhw2008#yeah.net (#換為@)
          謝謝。

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-06-08 19:46 by appT
          同求rar.zip.7z@gmail.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-06-10 12:29 by phil
          最近在學這個,所以懇請樓主也發我一份,萬分感謝~
          phil1233@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-06-10 17:38 by wer
          能不能發把項目代碼發到我的郵箱:
          jtrwl@126.com
          謝謝。

          # re: 用HtmlParser 寫個簡單的 news爬蟲[未登錄]  回復  更多評論   

          2009-06-11 13:44 by 小生
          兄弟,也發一份吧!
          pan19849529@126.com

          # re: 用HtmlParser 寫個簡單的 news爬蟲  回復  更多評論   

          2009-10-20 11:24 by 火焰出林
          麻煩樓主給我發份,謝謝
          Email:blameswood@hotmail.com
          主站蜘蛛池模板: 璧山县| 资兴市| 宁南县| 寿宁县| 克山县| 右玉县| 丹江口市| 如东县| 峡江县| 黄冈市| 眉山市| 衡山县| 衡阳县| 都匀市| 许昌县| 湘阴县| 东丰县| 铁力市| 深州市| 丹凤县| 黎川县| 丰台区| 仁寿县| 凉城县| 阿克苏市| 大关县| 遂川县| 宁夏| 顺昌县| 乐亭县| 美姑县| 高碑店市| 来宾市| 岐山县| 普兰店市| 封丘县| 云梦县| 武宣县| 宁乡县| 郯城县| 竹溪县|