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. STL之deque双向队列

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...

  2. NYOJ -37回文字符串

    这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了.原因是是因为只要是在公共子序列里面,那么他就是对称的 ...

  3. PHP编写的SVN类

    <?php /** * SVN 外部命令 类 * * @author rubekid * * @todo comment need addslashes for svn commit * */ ...

  4. SQL从入门到基础–03 SQLServer基础1(主键选择、数据插入、数据更新)

    一.SQL语句入门 1. SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法. 2. SQL语句中字符串用单引号. 3. SQL语句中,对于SQL关键字大小写不敏感,对于字符串值大小 ...

  5. 策略模式Strategy(对象行为型)

    原文地址:http://blog.csdn.net/hguisu/article/details/75582491.策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换.本模式使得 ...

  6. iOS9.3 Could not find Developer Disk Image 真机调试错误解决办法

    昨天手机系统升级9.3,到了公司真机测试的时候发现Xcode(7.2.1)报错:Could not find Developer Disk Image , 这是因为我的Xcode7.2中还没有支持9. ...

  7. ios视图切换之push与present混用

    在变成过程中,经常遇到两个视图控制器之间的切换,导航控制器即UINaVigation是最常用的一种,有时为了某些效果又需要进行模态切换,即present. 我们的布局经常是在window上加一个nav ...

  8. 在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。

    在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程. 答案:可以通过Intent对象.静态变量.剪切板和全局对象进行数据传递,具体的数据传递方法如下. 1. ...

  9. 用C实现一个简单的对拍器——致每个曾经为求AC披星戴月的程序员们

    大一新生,首次创作,虚心受教. 实现思路: 一.需要一个输入文件(input.txt),两个对拍程序(main1.exe,main2.exe) 二.将标准输入重定向为input.txt.将标准输出分别 ...

  10. 解决VS2013中“This function or variable may be unsafe”的问题

    1.在VS2013中编译代码时出现如上错误信息,下面就介绍下如何解决This function or variable may be unsafe的问题. 2.用VS2013打开出现错误的代码文件 3 ...