android 爬取xml,Android Studio 爬虫 之 简单实现使用 jsoup/okhttp3 爬取购物商品信息的案例demo(附有详细步骤)...

Android Studio 爬虫 之 简单实现使用 jsoup/okhttp3  爬取购物商品信息的案例demo(附有详细步骤)

目录

Android Studio 爬虫 之 简单实现使用 jsoup/okhttp3  爬取购物商品信息的案例demo(附有详细步骤)

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、下载相关 jar 包

六、网页数据分析,以确认 jsoup 解析需要的数据

七、实现步骤

八、关键代码

九、参考工程

一、简单介绍

Android 开发中的一些基础操作,使用Java 实现爬取指定网页的信息的方法整理,便于后期使用。

本节介绍,爬取 https://www.smzdm.com/ 网页的值得买精选的购物商品信息的方法,其中使用的工具是 jsoup 和 okhttp3。

二、实现原理

1、okhttp3 获得网页的 html 内容

2、jsoup  解析 html 的内容,获取需要的部分信息

三、注意事项

1、网页的 html 有些格式标签可能会变化,具体根据实际最新的网页 html 为准

2、AndroidManifest.xml 中注意添加 INTERNET 权限

3、okhttp3 依赖 okio (最好下载 okio-1.16.0.jar),使用的时候也要添加这个 jar 包

0a51c3513be22d425a6024a9d2254b9b.png

四、效果预览

fdc3aff268219e4e483e2dc5d3897801.png

五、下载相关 jar 包

1、jsoup.jar 下载

1)百度搜索 jsoup.jar

9dc9a33e7927d317f4b5018985cf4e36.png

2)点击下载即可

(网址:https://jsoup.org/download)

86f72081f8d4985760aeafdbb3c4bf06.png

2、okhttp.jar 下载

1)百度搜索 okhttp.jar

c6a9f9834c70f17020f09bb311e46468.png

2)对应下载即可(若官网打不开,可以使用搜索结果其他方式下载即可)

(github 网址:https://github.com/square/okhttp)

3、okio-1.16.0.jar 下载

1)百度搜索 okio-1.16.0.jar

48f5cfbe763e4b7fd92b237b9f64f798.png

2)点击下载即可

a30e487fefabab028b8d6c7de3e6ddad.png

六、网页数据分析,以确认 jsoup 解析需要的数据

1、爬取目标网页

(网址为:https://www.smzdm.com/)

14e782a34ba25a40d422cb5ce433834d.png

2、选中网页右键 检查元素(这里以火狐浏览器为例),查看 html 源码

5c2b2d4bbb023b1c32c6afbd96174600.png

3、点击选中 鼠标选择器,这样选择 html 就会和 网页 双双对应

861ed946fddf31479a420e6e4475a6b0.png

4、Elements 的目标 html 为如下

30e1298247ed947fea3ff8fe950d73c0.png

5、title 的目标 html 为如下

7cc2b2be05036b2cc96682ba9481ecb2.png

6、author 的目标 html 为如下

5d22b0351d91394dcb5a8a738913538a.png

7、imgurl 的目标 html 为如下

987a46f6ac2e469c45aeca92c3af862d.png

8、context 的目标 html 为如下

9c1d66aa534cb85af1421524487d5c38.png

9、articleurl 的目标 html 为如下

(获取的方法很多,我根据图片获取的)

af32dff940c15e2ede3cec99993d0208.png

七、实现步骤

1、打开 Android Studio 之后,新建一个工程或者一个模块

88d64361e055e980d950baf471c80bd6.png

2、选择 模块,点击 Next

96367ead4f00e4b59ed21786b69bf120.png

3、取个名称,点击 Next

3630c07a9c2da713b41f9fdb5bc5a963.png

4、选择 Activity ,点击 Next

caa18eb3958e5242f5a461b4b0243f34.png

4、取个名称,点击 Finish

abc4e454341cf5da4242ce55099b3d21.png

5、把下载好的 jar 添加到 libs 中

9159b13122fd5d5800178310aff0f027.png

6、把他们都引入模块中

40077abd7704250ee31fcbfb1e183797.png

7、编写相关代码,Article 为数据模型类,OkHttpUtils 获取网页 html,GetData 解析 html 整理成列表Article 模型数据,MainActivity 线程测试 OkHttpUtils /GetData  功能,并展示数据

ae106fd94d5507a9822e339491f76df8.png

8、打包apk,运行结果如上

fdc3aff268219e4e483e2dc5d3897801.png

八、关键代码

1、Article

package com.example.javacrawlertest.Tools;

/***

* 抓取到的文章数据封装

*/

public class Article {

private String title;

private String author;

private String imgUrl;

private String context;

private String articleUrl;

//有几个属性还没用到,所以构造方法先用上这四个有爬取到数据的

public Article(String title, String author, String imgUrl, String context, String articleUrl) {

this.title = title;

this.author = author;

this.imgUrl = imgUrl;

this.context = context;

this.articleUrl = articleUrl;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getImgUrl() {

return imgUrl;

}

public void setImgUrl(String imgUrl) {

this.imgUrl = imgUrl;

}

public String getContext() {

return context;

}

public void setContext(String context) {

this.context = context;

}

public String getArticleUrl() {

return articleUrl;

}

public void setArticleUrl(String articleUrl) {

this.articleUrl = articleUrl;

}

@Override

public String toString() {

return "Article{" +

"title='" + title + '\'' +

", author='" + author + '\'' +

", imgUrl='" + imgUrl + '\'' +

", context='" + context + '\'' +

", articleUrl='" + articleUrl + '\'' +

'}';

}

}

2、GetData

package com.example.javacrawlertest.Tools;

import android.util.Log;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import java.util.ArrayList;

public class GetData {

private static final String TAG ="GetData" ;

/**

* 抓取什么值得买首页的精选文章

* @param html

* @return ArrayListarticles

*/

public static ArrayListspiderArticle(String html){

ArrayListarticles = new ArrayList<>();

Document document = Jsoup.parse(html);

Elements elements = document

.select("ul[class=feed-list-hits feed-list-index]")

.select("li[class=feed-row-wide J_feed_za feed-haojia]");

Log.i(TAG, "spiderArticle: elements " +elements.html());

for (Element element : elements) {

String title = element

.select("h5[class=feed-block-title has-price]")

.text();

String author = element

.select("div[class=z-feed-foot]")

.select("span[class=feed-block-extras]")

.select("a")

.select("span")

.text();

String imgurl = element

.select("div[class=z-feed-img]")

.select("a")

.select("img")

.attr("src");

String context = element

.select("div[class=feed-block-descripe]")

.text();

String articleUrl = element

.select("div[class=z-feed-img ]")

.select("a")

.attr("href");

Article article = new Article(title,author,imgurl,context,articleUrl);

articles.add(article);

//Log.e("DATA>>",article.toString());

}

return articles;

}

}

3、OkHttpUtils

package com.example.javacrawlertest.Tools;

import android.util.Log;

import java.io.IOException;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

public class OkHttpUtils {

final static String TAG = "OkHttpUtils";

public static String OkGetArt(String url) {

String html = null;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url(url)

.build();

try {

Response response = client.newCall(request).execute();

//return

html = response.body().string();

} catch (IOException e) {

e.printStackTrace();

}

//Log.i(TAG, "OkGetArt: html "+html);

return html;

}

}

4、MainActivity

package com.example.javacrawlertest;

import android.os.Debug;

import android.os.Handler;

import android.os.Message;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import com.example.javacrawlertest.Tools.Article;

import com.example.javacrawlertest.Tools.GetData;

import com.example.javacrawlertest.Tools.OkHttpUtils;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

final static String url = "https://www.smzdm.com/";

final static String TAG = "MainActivity";

private Handler handler = new Handler() {

public void handleMessage(Message msg) {

Log.i(TAG, "handleMessage: "+ "爬结束");

switch (msg.what) {

case 1:

Log.i(TAG, "handleMessage: "+ "开始展示数据");

ArrayListarticles = (ArrayList)msg.obj;

Log.i(TAG, "handleMessage:articles.size() "+ articles.size());

for (Article item:articles) {

Log.i(TAG, "handleMessage: "+ item.toString());

}

break;

default:

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Test();

}

private void Test(){

new Thread(){

public void run(){

String html = OkHttpUtils.OkGetArt(url);

ArrayListarticles = GetData.spiderArticle(html);

//发送信息给handler用于更新UI界面

Message message = handler.obtainMessage();

message.what = 1;

message.obj = articles;

handler.sendMessage(message);

}

}.start();

}

}

5、AndroidManifest.xml

九、参考工程

1、工程下载地址:待审核

(也可以在CSDN搜索博文标题找到下载地址)

2、参考博文(谢谢博主):https://blog.csdn.net/FRYAN28/article/details/88741373

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值