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

 

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

 

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 包

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

 

四、效果预览

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

 

五、下载相关 jar 包

1、jsoup.jar 下载

1)百度搜索 jsoup.jar

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

 

2)点击下载即可

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

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

 

2、okhttp.jar 下载

1)百度搜索 okhttp.jar

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

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

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

 

3、okio-1.16.0.jar 下载

1)百度搜索 okio-1.16.0.jar

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

 

2)点击下载即可

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

 

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

1、爬取目标网页

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

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

 

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

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

 

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

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

 

4、Elements 的目标 html 为如下

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

 

5、title 的目标 html 为如下

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

 

6、author 的目标 html 为如下

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

 

7、imgurl 的目标 html 为如下

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

 

8、context 的目标 html 为如下

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

 

9、articleurl 的目标 html 为如下

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

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

 

七、实现步骤

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

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

 

2、选择 模块,点击 Next

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

 

3、取个名称,点击 Next

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

 

4、选择 Activity ,点击 Next

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

 

4、取个名称,点击 Finish

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

 

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

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

 

6、把他们都引入模块中

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

 

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

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

 

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

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

 

八、关键代码

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  ArrayList
articles */ public static ArrayList
spiderArticle(String html){ ArrayList
articles = 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: "+ "开始展示数据");
                                 ArrayList
articles = (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); ArrayList
articles = 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

 

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

你可能感兴趣的:(Android,Android,Android,Studio,爬虫,jsoup,爬取商品信息)