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");
 
 }
}

信息领域热词分析系统--java爬取CSDN中文章标题即链接的更多相关文章

  1. 信息领域热词分析系统--python切词

    利用python将标题切割成词语 import jieba #读取文件 f=open(r"F:\大数据\大作业\爬取到的数据\data1_xinxi.txt",'r') s=f.r ...

  2. 信息领域热词分析系统--python过滤

    利用python过滤去没用的词语,过滤的词语存储在停用文件中. #创建停用词表 def stopwordlist(): stopwords=[line.strip() for line in open ...

  3. 信息领域热词分析系统--python统计

    统计词语出现的频率,并且按从高到低的顺序报错在文件中 def main(): file=open("F:\大数据\大作业\分词后的文件\data4_xinxi.txt",'r') ...

  4. Java爬取先知论坛文章

    Java爬取先知论坛文章 0x00 前言 上篇文章写了部分爬虫代码,这里给出一个完整的爬取先知论坛文章代码. 0x01 代码实现 pom.xml加入依赖: <dependencies> & ...

  5. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  6. 阿里舆情︱舆情热词分析架构简述(Demo学习)

    本节来源于阿里云栖社区,同时正在开发一个舆情平台,其中他们发布了一篇他们所做的分析流程,感觉可以作为案例来学习.文章来源:觉民cloud/云栖社区 平台试用链接:https://prophet.dat ...

  7. Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云

    一 . Java爬取B站弹幕 弹幕的存储位置 如何通过B站视频AV号找到弹幕对应的xml文件号 首先爬取视频网页,将对应视频网页源码获得 就可以找到该视频的av号aid=8678034 还有弹幕序号, ...

  8. java爬取并下载酷狗TOP500歌曲

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...

  9. Java爬取并下载酷狗音乐

    本文方法及代码仅供学习,仅供学习. 案例: 下载酷狗TOP500歌曲,代码用到的代码库包含:Jsoup.HttpClient.fastJson等. 正文: 1.分析是否可以获取到TOP500歌单 打开 ...

随机推荐

  1. cmake 编译安装方法

    cmake版本3.7.2 1.根目录下./bootstrap 2.make 3.sudo make install

  2. R: 一页显示多张图的方法

    ################################################### 问题:一页多图显示   18.4.30 怎么实现,在一页上画多幅图,并且安排图的大小.个数等?? ...

  3. python3-list列表增删改查合并排序

    # Auther: Aaron Fan names = ["aaron", "alex", "james", "meihengfa ...

  4. 使用 Bulma

    一.起因 最近我在学习 SASS,通过它,可以将 CSS 像编程语言一样书写. 在最近之前,我又学习了 Flex 布局,用起来很方便. 所以,我学习了 Bulma 这个纯 CSS 框架--使用 Fle ...

  5. python语言积累

    调试打印堆栈 import traceback traceback.print_exc() #打印堆栈的详细信息

  6. sql删除语句几种方法说明

    delete from 'tableName: DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.(相当于把房子里家具全丢了,但为了纪念原先的家具,所以原先放家具的那块地以后不再放 ...

  7. CefSharp使用一

    一.使用NuGet搜索CefSharp然后下载CefSharp.WinForms和CefSharp.Common 二.引用CefSharp.Windows,CefSharp,CefSharp三个dll ...

  8. 【转】php通过curl跨域向asp.net服务器上传文件及参数

    转:http://blog.sina.com.cn/s/blog_13331dce50102vq32.html 这是一个由php通过调用asp.net接口向asp.net服务器post上传文件及参数并 ...

  9. [poj 1185] 炮兵阵地 状压dp 位运算

    Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用&quo ...

  10. SpringBoot浏览器直接访问html

    在resources文件夹或与其并列的文件夹下建立public文件夹,在public文件夹下的html文件可以通过浏览器中输入文件+后缀名的方式直接访问的.  一.public文件夹,就相当于在ecl ...