import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; /**
* grid2008的代码,解析了优先出版
*
*/ public class GetCkTest20082 {
//定义cat标记 注意大写。你懂的
static String cat="CJFQ";
static String sKuakuID = "";
public static void main(String[] args) { //列表url Map<String,String> cookies = getCookie(cat); if(cookies.size() >0){
//列表
String listUrl = "http://epub.cnki.net/grid2008/brief/brief.aspx?pagename=asp.brief_result_aspx&dbprefix=scdb&skuakuid="+sKuakuID+
"&loadgroup=1&prio=true&stab=normal&turnpage=1&recordsperpage=20&queryid="+sKuakuID+"&id=&curpage=3"; //文章最初链接
List<String> articleInitUrls = new ArrayList<String>();
Connection conn = Jsoup.connect(listUrl);
conn.method(Method.GET);
conn.followRedirects(false);
conn.timeout(5000);
conn.cookies(cookies);
try {
Document doc = conn.get();
Elements links = doc.select("a[target=NewBriefDetail]");
if(links.size() <= 0){
System.out.println("没有更多文章。");
}else{
for(Element link : links){
articleInitUrls.add(link.attr("abs:href"));
//System.out.println(articleInitUrls);
}
} } catch (IOException e) {
System.out.println("链接超时了。。");
} if(articleInitUrls.size()<=0){
System.out.println("没有文章!");
}
for(String articleInitUrl : articleInitUrls){ Connection conn2 = Jsoup.connect(articleInitUrl); conn2.header("Referer", listUrl);
conn2.cookies(cookies);
conn2.followRedirects(false);
try {
Document doc = conn2.get();
Elements links = doc.select("h2 > a[href]");
//System.out.println(links);
if(links.size()<=0){
System.out.println("最初链接为:【"+articleInitUrl+"】的文章获取实际链接失败!");
}else{ String url1 = links.toString();
//System.out.println(url1.substring(url1.indexOf("detail%252f")+11,url1.indexOf(".html")));
String url2=url1.substring(url1.indexOf("detail%252f")+11,url1.indexOf(".html")); //String articleUrl = links.get(0).attr("href"); String articleUrl="www.cnki.net/kcms/detail/"+url2+".html";
System.out.println(articleUrl);
//getArticle(articleUrl);
}
} catch (IOException e) {
System.out.println("最初链接为:【"+articleInitUrl+"】的文章链接超时!");
}
}
} } public static Map<String,String> getCookie(String cat) { String listUrl = "http://epub.cnki.net/grid2008/brief/Result.aspx";
//检索 String searchHander = "http://epub.cnki.net/grid2008/request/search.aspx?PageName=ASP.brief_result_aspx&DBViewType=FullText";
Connection conn = Jsoup.connect(listUrl);
conn.method(Method.GET);
conn.followRedirects(false);
conn.timeout(5000);
try {
Document doc = conn.get();
String db_opt = doc.select("input#db_opt").attr("value");
String db_prefix = doc.select("input#db_prefix").attr("value");
String db_configfile = doc.select("input#db_configfile").attr("value"); String searchHanderUrl = searchHander+"&DbCatalog="+db_opt+"&DbPrefix="+db_prefix+"&ConfigFile="+db_configfile;
Connection conn2 = Jsoup.connect(searchHanderUrl);
conn2.method(Method.GET);
conn2.followRedirects(false);
conn2.timeout(5000);
Response response;
Document doc2 = conn2.get();
String responseContent = doc2.select("body").text();
if(responseContent.indexOf("sKuakuID") !=-1){
System.out.println(responseContent.substring(responseContent.indexOf("sKuakuID")+9));
sKuakuID = responseContent.substring(responseContent.indexOf("sKuakuID")+9);
}
response = conn2.response();
return response.cookies();
} catch (IOException e) {
System.out.println("获取cookies的链接超时了。你懂的!");
return new HashMap<String,String>();
} } public static void getArticle(String articleUrl) {
Connection conn = Jsoup.connect(articleUrl);
conn.method(Method.GET);
conn.followRedirects(false);
conn.timeout(5000);
try {
Document doc = conn.get();
//这里只打印标题了。
Elements links = doc.select("span#chTitle");
System.out.println("文章标题:"+links.get(0).text()+"——链接:【"+articleUrl+"】");
} catch (IOException e) {
System.out.println("链接文章:【"+articleUrl+"】超时了。");
} } }

解析了grid2008的代码的更多相关文章

  1. python解析xml模块封装代码

    在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...

  2. asp.net C#生成和解析二维码代码

    类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...

  3. twemproxyRedis协议解析探索——剖析twemproxy代码正编

    这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是 ...

  4. 使用C#解析并运行JavaScript代码

    如果想在C#编程中解析并运行JavaScript代码,常见的方式有两种: 利用COM组件“Microsoft Script Control”,可参见:C#使用技巧之调用JS脚本方法一 利用JScrip ...

  5. Laravel源码解析之model(代码)

    本篇文章给大家带来的内容是关于Laravel源码解析之model(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 提前预祝猿人们国庆快乐,吃好.喝好.玩好,我会在电视上看 ...

  6. ReactiveSwift源码解析(八) SignalProducer的代码的基本实现

    在前面几篇博客中我们详细的聊了ReactiveSwift中的Bag.Event.Observer以及Signal的使用方式和代码实现.那么在接下来的这几篇博客中,我们就依附于之前博客的基础上来聊一聊S ...

  7. ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁

    本篇博客我们来聊一下ReactiveSwift中的原子性操作,在此内容上我们简单的聊一下Posix互斥锁以及递归锁的概念以及使用场景.然后再聊一下Atomic的代码实现.Atomic主要负责多线程下的 ...

  8. IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

    前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...

  9. 【零基础】AI神经元解析(含实例代码)

    一.序言 关于“深度学习”大部分文章讲的都云里雾里,直到看到“床长”的系列教程以及<深度学习入门:基于Python的理论与实现>,这里主要是对这两个教程进行个人化的总结,目标是让“0基础” ...

随机推荐

  1. windows下配置两个或多个Tomcat启动的方法

    确保window的环境变量中找不到CATALINA_HOME和CATALINA_BASE 修改server.xml,用解压版的tomcat,不要用安装版的. 1.修改http访问端口 conf下的se ...

  2. YII框架中php入口文件隐藏

    Apache配置修改 主要修改下httpd文件中的两个地方 1.启用mod_rewrite.so模块,在Apache的配置文件中找到如下行,去掉前面的字符"#",保存 #LoadM ...

  3. Jquery+css实现图片无缝滚动轮播

    Today,在XX学院的教学视频中,偶尔看到了Jquery+css实现图片无缝滚动轮播视频教程,虽然以前已写过类似的,但是我感觉他学的比较精简.为了方便以后做项目时直接拷贝,特地写出来,顺便和大家分享 ...

  4. xib添加手势后报错:-[UITapGestureRecognizer setFrame:]: unrecognized selector sent to instance xxx

    主要原因如下: + (instancetype)mineHeaderView { return [[NSBundle mainBundle] loadNibNamed:@"DDMineHea ...

  5. Swift - 41 - swift1.2新特性(1)

    更简洁的if-let import UIKit func attack(name: String, enemyName: String, weapon: String) { print("\ ...

  6. java转换流

    转换流是把字节流转换成字符流,比如往一个文件中写内容,原本是一个字节一个字节的写,转换为字符流后,我们可以一个字符串,一个字符串的写,书写中文很方便 转换流class: OutputStreamWri ...

  7. VS2013 编译 MySql Connector C 6.1.6

    1.下载cmake http://cmake.org/ 2.下载最新版MySql Connector C http://www.mysql.com 3.命令行下,转到源代码目录下,"cmak ...

  8. 论 Java 中获取一组不重复的随机数之性能问题

    今天在做一个Java项目, 用到了使用一组不重复的随机数问题, 不管怎么做随机数里面总有几个是重复的. 于是上网去找资料, 在网上找到的资料中大部分都是一个思路: 网上的思路一:(性能不理想) 先生成 ...

  9. PHPCMS v9构建模块

    ■补课: 1.phpcms v9帮助文件,上面会写关于二次开发的一些方法. http://v9.help.phpcms.cn/ 2.找一个后台还没安装的模块,先把代码看一边.比如dianping模块 ...

  10. IE6浏览器兼容问题及部分解决方案(网上整理)

    作为一个初涉前端技术的IT菜鸟,IE浏览器的兼容问题是一个不得不跨越的坎.为了能够在不同浏览器达到同样的显示效果,就不得不花心思想出办法实现兼容.由于各大主流浏览器内核不同,各自的实现标准有所差异,因 ...