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. 几个常用的ps命令

    1. ps aux If you are looking for a short summary of the active processes, use  ps aux [root@rhel7 tm ...

  2. HDU -2670 Girl Love Value

    这道题是刚好装满的背包问题,刚好选取k个,状态转移方程为dp[i][j] = max( dp[i - 1][j], dp[i - 1][j - 1] + Li - Bi(j - 1) ) dp[i][ ...

  3. Nginx优化—配置优化

    完整配置如下所示: user nginx; #运行的用户 pid /var/run/nginx.pid; worker_processes auto; #定义了nginx对外提供web服务时的word ...

  4. spring源码测试

    org.springframework.context.annotation.ComponentScanParserTests.componentScanWithAutowiredQualifier( ...

  5. Eclipse+maven发布ee项目jar包未发布

    背景:在Eclipse中搭建好EE环境后,发布时,出现ClassNotFoundException: XX.XX.ConfigureListener,查看时,对应的jar包都引入了,项目没也没出错,但 ...

  6. RTX管理器服务运行状态空白

    A)打开RTX管理器安装目录下的bin文件夹,运行convert.bat 右键计算机——管理——服务——找到以RTX开头的服务,按RTX_ConfigCenter.RTX_HTTPServer. RT ...

  7. Php OpenID

    也许大家都有这样的经历与烦恼:当你为了使用某个网站的服务时(若你还没在该网站上注册过),你不得不先注册一个帐号.当你在一堆的网站上注册帐号后,你必需面临管理这些帐号的烦恼.也许你会这样考虑,不同网站注 ...

  8. intellij idea 热部署失效,需要手动编译类

    从网上看到的解决方案,做一下备忘: spring boot项目中遇到jrebel类需要手动编译才会触发热部署的问题(spring boot devtools一样的问题) 1.ctl + shift + ...

  9. C++采用模板实现栈的方法

    今天又看了遍<effective C++>,手动实现了一下条款42中的栈,贴出来当博客的处女贴. 首先栈的声明如下,采用了模板传入类型,而栈的底层采用是个链表. // stack.h // ...

  10. C# 缩略图算法

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. using (var stream = new FileStream(physicalPath, F ...