爬虫,你最先想到用什么爬?Python?Java?方式有多种,今天讲讲android的一个爬虫框架Jsoup.按照官网介绍->jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
有兴趣的朋友可以去探讨一下它的实现原理,如果你懂一点js,看起来可能会更舒服些。
这里是爬的“百思不得姐”的图片数据,下面是成功爬取的数据,开车,锁好门~~~
jsoup的导入
implementation ‘org.jsoup:jsoup:1.11.3’
jsoup的使用
1、获取Html
jsoup提供两种网络请求,get和post,使用代码也及其简单,我们首先爬取糗事百科首页的HTML。注意:由于是网络请求操作,必须放在子线程中运行,否则4.4以上的版本会报错
①post方式
Document doc = Jsoup.connect(“http://www.budejie.com/1“)
.data(“query”, “Java”)
.userAgent(“Mozilla”)
.cookie(“auth”, “token”)
.timeout(3000)
.post();
参数介绍
1)connect:设置连接的Url
2)data:设置post的键值对数据
3)userAgent:设置用户代理(请求头的东西,可以判断你是PC还是Mobile端)
4)cookie:设置缓存
5)timeout:设置请求超时
6)post:发送post请求
②get方式
new Thread() {
@Override
public void run() {
super.run();
try {
Document doc = Jsoup.connect(“http://www.budejie.com/1“).get();
}
catch{
//异常
}
}
}.start();
2、解析HTML元素(jsoup封装的比较好,直接找到父容器div的class名字,就可以一步一步往下走,不管div上面还有没有div,直接找到class的名字就可以)
这个是不得姐的首页,找到“j-r-list-c-desc”这个div之后,获取到a标签里面的href的链接跳转到详情页,就是下图
很明显有2个div是装载了标题和图片的,直接解析即可。
解析完HTML代码之后,就可以在android端利用jsoup爬取数据了。代码很简单,这里使用的是get请求方式。这里封装了实体类接收爬到的数据显示在手机上
**主要代码**
new Thread() {
@Override
public void run() {
super.run();
try {
/**
* Document:相当于一个Html文件
Elements:相当于一个标签的集合
Element:相当于一个标签
*/
for (int k = 0; k < 5; k++) {//爬取5页内容
Document doc = Jsoup.connect("http://www.budejie.com/" + k).get();
Elements els = doc.select("div.j-r-list-c-desc");
for (int i = 0; i < els.size(); i++) {
Elements el = els.get(i).select("a");
String href = el.attr("href");
// 拿到这条段子的详情链接
// Log.e("链接", href);
Document doc_detail = Jsoup.connect("http://www.budejie.com/" + href).get();
Elements els_detail = doc_detail.select(".j-r-list-c-desc");
Log.e("內容", els_detail.text());
//
Elements els_pic = doc_detail.select(".j-r-list-c-img img[src$=jpg]");
if (!els_pic.isEmpty()) {
String pic = els_pic.attr("src");
Log.e("图片连接", "" + pic);
} else {
Log.e("图片连接", "无");
}
// Content content = new Content(els_detail.text(), els_pic.attr("src"));
// content.save();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
至此,jsoup爬虫就已经完成了,使用jsoup比较简单,关键的是解析HTML代码的时候,一个一个节点的去找,分析这里存在一点困难,总体还是简单的。还没试过Python爬虫,有时间可以整一个。
欢迎扫码关注我的公众号,获取更多干货分享