您的位置:首页 > 运维架构 > 网站架构

根据专利号到专利查询的网站上抓取想要的信息(下)

2014-02-26 20:39 302 查看
上一回讲了怎么根据一个专利号发送我们要查询信息的请求,详情请看根据专利号到专利查询的网站上抓取想要的信息(上)。接下来要做的就是从一个Excel表中去读取我们要查的一系列的申请号,然后将抓到的信息写到我们的Excel表中。
这里需要引入的是jexcel.jar包了,下载地址,或是从本文的附件中拿过去。这里要说明的是这个jar包目前只支持excel95-2003以及以下的支持,这个需要特别注意的,如果你的文件是xlsx结尾的,那么记得把它另存为.xls格式的。
public static void main(String[] args) {
System.out.println(System.setProperty("sun.net.client.defaultConnectTimeout", String
.valueOf(100000)));// (单位:毫秒)
WebpageCapture demo = new WebpageCapture();
WritableWorkbook book = null;
try {
//demo.captureHtml("111.142.55.73");
//Workbook对象用来解析Excel文件
Workbook workbook ;
//工作表,用于解析Excel文件里面的工作表
Sheet sheet;
//这里我的文件是直接放在项目中的,所以没有加具体的路径信息
workbook = Workbook.getWorkbook(new  File("要读取的文件.xls"));
//getSheet(0)表示读取Excel文件的第一个工作表,如果要读取第二个就是getSheet(1),其他的以此类推。
//也可以接受getSheet(String str)的形式,str表示工作表的名字
sheet = workbook.getSheet(0);
String sqid = "";
//一个我们新创建的Excel文件
book = Workbook.createWorkbook(new  File("要写的文件.xls"));
WritableSheet sheet2 = book.createSheet("sheet1", 1);
int j = 0;
//下面的循环用来读取每一个申请号,sheet.getCell(int column, int row)
//和我们平常的习惯不一样,这里第一个要写的是列,第二个是行
for(int i=0; i<100; i++){
sqid = sheet.getCell(0, i+1).getContents();
System.out.println(sqid+"的信息"+"\t"+(i+1));

sheet2.addCell(new Label(0,j++,sqid+"的信息"));
//根据sqid调用getFeiInfo(int sqid,WritableSheet sheet2,int rows)
//上面的rows表示选用的信息的行数,主要用于排版的作用
//至于这里的getInfo方法也是基于上一讲的getFeiInfo(String sqid);
j = demo.getFeiInfo(sqid,sheet2,j);
}

} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//把缓存的信息写进去
book.write();
} catch (IOException e) {
e.printStackTrace();
}
try {
//关闭对文件的解析
book.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
下面是
getFeiInfo(int sqid,WritableSheet sheet2,in
t rows)的具体实现

public int getFeiInfo(String sqid, WritableSheet sheet2, int j) throws IOException, RowsExceededException, WriteException {
Document doc = Jsoup.connect("http://app.sipo.gov.cn:8080/searchfee/searchfee_action.jsp").data("sqh", sqid).post();
Elements info = doc.getElementsByTag("tr").select(".dixian1");
int i = 0;
for (Element element : info) {
sheet2.addCell(new Label(i++,j,element.text()));
if(8==i){
i=0;
j++;
}
}
return j;
}
得到的Excel表的内容显示如下


这还是一个比较粗糙的,算是jsoup和jexcel的一个抛砖引玉吧,自己也还有很多不知道的,还有待进一步的深入。

附件jecxeclapi.jar下载地址:点这里去下载页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息