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. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  2. Java-马士兵设计模式学习笔记-工厂模式-简单工厂

    一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...

  3. labview中的移位寄存器、循环隧道,自动索引隧道的区别

    对于循环结构(For 循环.while循环)而言,循环体内的数据域外部数据的传递是通过以下三种方式: 1.移位寄存器2.循环隧道3.自动索引隧道 第一.各自的区别.作用 循环隧道,就是把数据传入传出循 ...

  4. sql 插入

    今天处理了一个有关数据库表数据批量插入的问题.部分细节,自己之前没有遇到过.索性就整理下来,做个备忘录. 主要是将一个表的数据导入到另一张表中.这种插入方法,需注意两张表的对于字段的数据结构需要保持一 ...

  5. P1579 哥德巴赫猜想(升级版)

    程序是人类的财富!!11 ------------------------------------------- 题目链接:MIKU OK,Let's gi; -------------------- ...

  6. SSH—Struts2拦截器的应用(防止未登录用户进行操作)

    前言 类似于京东.淘宝这些平台,如果单纯的去浏览页面上的一些商品显示,一点问题都没有,但是当你点击商品的订单详情或者想查看一下自己的购物车,那么就会出现通过登录进去的界面,这个就是今天要说的这个拦截器 ...

  7. P4213 【模板】杜教筛(Sum) min_25筛

    \(\color{#0066ff}{ 题目描述 }\) 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(ans_1=\sum_{i=1}^n\varphi(i)\) \(ans_2=\s ...

  8. socket 中read返回0的情况

    当client,调用read(socketfd,buffer,n)时,返回0的情况: 1.server端调用了close(soketfd)函数 2.server调用了close(fd,SHUT_WR) ...

  9. .NET Services Stack笔记之手写版

  10. [USACO5.4]奶牛的电信Telecowmunication 最小割

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...