PC端我们抓包常用到工具是Fiddler,那app端要怎么抓包?
1、首先将jsoup-1.8.1.jar(点击下载)、poi-3.7.jar(目前上传不了,可以优快云资源中去搜索下载)这两个包放到项目中,并依赖。
2、创建实体:根据自己需要保存数据信息
public class CrawlerElement {
private String href;
private String title;
private String hotNum;
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getHotNum() {
return hotNum;
}
public void setHotNum(String hotNum) {
this.hotNum = hotNum;
}
}
3、抓取并保存在Excel中(其中抓取数据放在线程中处理)
//全局变量:保存抓取数据
private List<CrawlerElement> crawlerElementList = new ArrayList<>();
/**
* 获取微博热搜源数据
*/
public void crawlerData() {
io.reactivex.Observable.create(new ObservableOnSubscribe<Document>() {
@Override
public void subscribe(ObservableEmitter<Document> emitter) throws Exception {
Document doc = Jsoup.connect("http://s.weibo.com/top/summary?cate=realtimehot").get();
emitter.onNext(doc);
emitter.onComplete();
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Document>() {
@Override
public void onSubscribe(Disposable d) {
if (isFinishing()) {
d.dispose();
}
}
@Override
public void onNext(Document document) {
Log.d(TAG, "onNext: 得到数据");
// System.out.println(document);
crawlerElementList.clear();
CrawlerElement crawlerElement;
Elements uls = document.getElementsByClass("list_a");
if (uls.size() > 0) {
for (int i = 0; i < uls.get(0).getElementsByTag("a").size(); i++) {
crawlerElement = new CrawlerElement();
crawlerElement.setTitle(uls.get(0).getElementsByTag("span").get(i).html());
// Log.d(TAG, "onNext: " +uls.get(0).getElementsByTag("span").get(i).html());
crawlerElement.setHref(uls.get(0).getElementsByTag("a").get(i).attr("href"));//nice
crawlerElementList.add(crawlerElement);
}
}
saveInExcel();
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: 失败");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete: 完成");
}
});
}
/**
* 将数据导入到Excel表中
*/
private void saveInExcel() {
//第一步 创建一个webbook 对应一个excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//第二步 在webbook中添加一个sheet,对应excel中的sheet
HSSFSheet sheet = wb.createSheet("热搜排行榜");
//第三步 在sheet中添加表头第0行 注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //创建一个居中格式
HSSFCell cell1 = row.createCell(0);
cell1.setCellValue("热搜排名");
cell1.setCellStyle(style);
HSSFCell cell2 = row.createCell(1);
cell2.setCellValue("URL");
cell2.setCellStyle(style);
//第五步 写入数据 从网络中爬取下来
List<CrawlerElement> list = crawlerElementList;
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
//第四步 创建单元格 并设置值
//目前采用截取的方式解决问题,jsoup还不太完全明白
String result = list.get(i).getTitle();
if (result.contains("<em>")) {
int index = result.indexOf("<em>");
result = result.substring(0, index);
}
row.createCell(0).setCellValue(result);
row.createCell(1).setCellValue(list.get(i).getHref());
}
//第六步 将文件存储到指定位置
try {
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/crawler.xls");
wb.write(fos);
fos.flush();
fos.close();
ToolToast.showToast("数据已保存在Excel");
} catch (Exception e) {
e.printStackTrace();
}
}