解析了grid2008的代码
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的代码的更多相关文章
- python解析xml模块封装代码
在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...
- asp.net C#生成和解析二维码代码
类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...
- twemproxyRedis协议解析探索——剖析twemproxy代码正编
这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是 ...
- 使用C#解析并运行JavaScript代码
如果想在C#编程中解析并运行JavaScript代码,常见的方式有两种: 利用COM组件“Microsoft Script Control”,可参见:C#使用技巧之调用JS脚本方法一 利用JScrip ...
- Laravel源码解析之model(代码)
本篇文章给大家带来的内容是关于Laravel源码解析之model(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 提前预祝猿人们国庆快乐,吃好.喝好.玩好,我会在电视上看 ...
- ReactiveSwift源码解析(八) SignalProducer的代码的基本实现
在前面几篇博客中我们详细的聊了ReactiveSwift中的Bag.Event.Observer以及Signal的使用方式和代码实现.那么在接下来的这几篇博客中,我们就依附于之前博客的基础上来聊一聊S ...
- ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁
本篇博客我们来聊一下ReactiveSwift中的原子性操作,在此内容上我们简单的聊一下Posix互斥锁以及递归锁的概念以及使用场景.然后再聊一下Atomic的代码实现.Atomic主要负责多线程下的 ...
- IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗
前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...
- 【零基础】AI神经元解析(含实例代码)
一.序言 关于“深度学习”大部分文章讲的都云里雾里,直到看到“床长”的系列教程以及<深度学习入门:基于Python的理论与实现>,这里主要是对这两个教程进行个人化的总结,目标是让“0基础” ...
随机推荐
- java.net.MulticastSocket Example--reference
In this example we are going to explain how to use MulticastSocket in Java, in order to enable a ser ...
- MM32看门狗学习(兼容STM32)
MM32看门狗学习(兼容STM32) IWDG独立看门狗 思维导图 IWDG框图与理解 1.独立看门狗分为两个部分,配置寄存器在1.8V供电区,计数器的核心部分在VDD供电区(即使停机/待机模式计数器 ...
- 95秀-dialog 进度对话框 实用工具
工具Util public class DialogUtil { public static ProgressDialogView progressDialog; /** * ...
- AngularJs学习之ng-repeat
ng-repeat用来遍历一个集合或为集合中的每个元素生成一个模板实例.集合中的每个元素都会被赋予自己的模板和作用域.同时每个模板实例的作用域中都会暴露一些特殊的属性. $index:遍历的进度(0 ...
- mysql怎么限制某些查询语句的执行?
mysql怎么限制某些查询语句的执行? 比如某些sql语句执行时间很长,超过10s,怎么样超过10s就不让其执行? 后续更新中...
- ASP.Net中的编码与解码
当javascript传递的参数中有中文时,服务端获得的将是乱码,此时需要用到编码和解码 javascript中编码与解码的三种方法 escape方法返回一个可在所有计算机上读取的编码 String ...
- 【转】三十分钟学会STL算法
转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...
- linux(vi)多行注释和取消注释.
//comment1,'ctrl+v' to VISUAL BLOCK mode.2,'j' or 'k' to select/deselect lines.3,'I' to INSERT mode. ...
- 安卓手机内外SD卡互换
相信有許多人....有內置sd太小...外置sd(sdcard2或extsd)卻只能放資料.... 一些遊戲或者是影音播放軟體....根本不會去讀外置sd(sdcard2或extsd)..... 記憶 ...
- UITableViewCell实现3D缩放动画
gif效果图: 代码部分: import UIKit class TableViewController: UITableViewController { override func viewDidL ...