您的位置:首页 > 其它

爬虫导入

2016-03-29 18:22 211 查看
新东家还没开放所有权限,因此就临时接了一位同学手上的小工具活,功能是从某网站抓取数据并导入比对。场景看属于最简单的,直接reponse回来就能解析获取了。小工具用的是jsoup,相关材料也很多。(一开始先把原来的netbean工程改成eclipse,强迫症)

(一)主要抓取流程

设置url ,请求方式get或者post等
int requestType = rule.getRequestMoethod();

Connection conn = Jsoup.connect(url);
设置参数
conn.data(params[i], values[i]);
获取返回页面doc对象
doc = conn.timeout(5000).get();//根据实际情况post或者get等等其他
解析,简单列举了几个,基本就是dom的操作了,非常简洁~
results = doc.getElementsByClass(resultTagName);
results = doc.getElementsByTag("body");
Elements links = result.getElementsByTag("td");


(二)导入碰到的问题

数据抓取后,原先是通过poi生成xls再导入。但是有个问题,解析用的是split(“xxx”) 拆分预处理生成的由分隔符拼接的字符串,但是该方法默认只会重复匹配n-1次,最后如果出现”\n\n\n”等空字符串拼接的情况该函数只会匹配一次,从而导致返回的列数不对。

【如果需要匹配可以采用split(“\n”,-1)强制匹配到最后一个匹配符得出正确结果】

临时规避方法则是,代码避免生成空字符串或者由于office2007编辑后默认保存为空字符串。具体做法通过poi生成的时候强制设定了单元格格式(避免编辑后由于格式兼容重新设置为空字符串)

<pre name="code" class="java">HSSFCellStyle cellStyle = hwb.createCellStyle();
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
设置单元格格式
item.setCellStyle(cellStyle);
item.setCellValue(new HSSFRichTextString(descs[j]));




生成后或者生成后在编辑保存,不会由于2007格式保存兼容处理默认为空字符串,而是默认的null类型,程序可以识别列数正常导入。

总结,练手验证性能。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: