zoukankan      html  css  js  c++  java
  • 信息领域热词分析系统--java爬取CSDN中文章标题即链接

    package zuoye1;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import us.codecraft.webmagic.Page;
    import us.codecraft.webmagic.Site;
    import us.codecraft.webmagic.Spider;
    import us.codecraft.webmagic.processor.PageProcessor;
    public class CSDNPageProcessor implements PageProcessor {
     private static Connection conn = null;
     private static PreparedStatement ps = null;
     // 标题和链接获取
     private static String TITLEQUERY = "div.list_con div.title h2 a";
     // 作者
     private static String AUTHORQUERY = "dl.list_userbar  dd.name  a";
     
         //初始化带爬取网页地址
         private static List<String> urls() {
         
          List<String> listUrl=new ArrayList<String>();
          String[] type=new String[]{"nav/newarticles","nav/news","nav/ai","nav/cloud","nav/db","nav/career","nav/game","nav/engineering","nav/other"};
          for(int i=0;i<type.length;i++) {
           String url2="https://blog.csdn.net/"+type[i];
          
           listUrl.add(url2); 
          }
          return listUrl;
         }
         //jsoup根据html字符串和语法来获取内容
         private static String selectDocumentText(String htmlText,String Query) {
          Document doc=Jsoup.parse(htmlText);
          String select=doc.select(Query).text();
          return select;
         }
        
         //jsoup根据html字符串和语法获取链接地址
         private static String selectDocumentLink(String htmlText,String Query) {
          Document doc=Jsoup.parse(htmlText);
          String select=doc.select(Query).attr("href");
          return select;
         }
        
     @Override
     public Site getSite() {
      return Site.me().setSleepTime(1000).setRetryTimes(10);
     }
     
     //编写抽取逻辑
     @Override
     public void process(Page page) {
      
      page.addTargetRequests(urls());
      
      //定义如何抽取页面信息
      List<String> htmls=page.getHtml().xpath("//li[@class='clearfix']/html()").all();
      
      List<JavaBokeModel> javaBokes=new ArrayList<JavaBokeModel>();
      for(String html:htmls) {
       JavaBokeModel javaBoke=new JavaBokeModel();
      //标题和链接
       String title=selectDocumentText(html,TITLEQUERY);
       
       String linke=selectDocumentLink(html,TITLEQUERY);
         //作者和作者主页
       String author=selectDocumentText(html,AUTHORQUERY);
       
      //简介
       
       System.out.println(title+"   "+linke+"  "+author);
       javaBoke.setTitle(title);
       javaBoke.setAuthor(author);
       
       javaBoke.setLinke(linke);
      
       javaBokes.add(javaBoke);
         
      }
      
      File.WriteStringToFile2(javaBokes);
      
     }
     
     public static void main(String[] args) {
      long startTime,endTime;
      DBUtil.getConnection();
      startTime=new Date().getTime();
      Spider create=Spider.create(new CSDNPageProcessor());
         create.addUrl("https://blog.csdn.net/").thread(5).run();
      try {
       ps.close();
       conn.close();
      }catch(Exception e) {
       
      }
      endTime=new Date().getTime();
      System.out.println("用时为:"+(endTime-startTime)/1000+"s");
     
     }
    }
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    ajax请求默认都是异步请求,怎么变为同步请求
    TP6跨域问题
    localStorage使用总结
    win10 windows management instrumentation cpu占用高解决方法
    限制性股票-股份支付
    可转债会计分类
    其他权益工具投资的交易费用计入成本
    年数总和法
    外币货币性项目汇兑差额应当计入当期损益
    chrome怎么设置点击窗口在新窗口打开
  • 原文地址:https://www.cnblogs.com/wl2017/p/10294410.html
Copyright © 2011-2022 走看看