1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android爬虫(一)使用OkHttp+Jsoup实现网络爬虫

Android爬虫(一)使用OkHttp+Jsoup实现网络爬虫

时间:2018-11-21 14:17:23

相关推荐

Android爬虫(一)使用OkHttp+Jsoup实现网络爬虫

这几天写了一个Android上面简单的爬虫Demo

数据爬取完后通过RecyclerView展示,这篇文章先写爬取数据部分

这里我爬虫测试网站是:什么值得买

想要爬取的数据是首页的一些精选文章,主要爬取文章标题、图片、简介

这个是我爬到的数据

这里需要引用到Jsoup和OkHttp的jar包,我是下载下来,添加到项目工程当中

也可以直接在gradle文件当中配置

implementation 'org.jsoup:jsoup:1.11.3'implementation 'com.squareup.okhttp3:okhttp:3.4.1'

然后就可以开始写代码爬虫啦

实体类Article.java

/**@Author:Swallow*@Date:/3/21* 抓取到的文章数据封装*/public class Article {private String title;private String author;private String imgUrl;private String context;private String articleUrl;private String date;private String from;//有几个属性还没用到,所以构造方法先用上这四个有爬取到数据的public Article(String title, String author, String imgUrl, String context) {this.title = title;this.author = author;this.imgUrl = imgUrl;this.context = context;}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;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}@Overridepublic String toString() {return "Article{" +"title='" + title + '\'' +", author='" + author + '\'' +", imgUrl='" + imgUrl + '\'' +", context='" + context + '\'' +", articleUrl='" + articleUrl + '\'' +", date='" + date + '\'' +", from='" + from + '\'' +'}';}}

OkHttp请求网络

/**@Author:Swallow*@Date:/3/7*/public class 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()) {//returnhtml = response.body().string();} catch (IOException e) {e.printStackTrace();}return html;}}

抓取数据的类

这里用到Jsoup,它主要是解析获取到的网页资源的HTML标签来抓取里面的数据

这里我们可以到原本的网址上去查看网页源码,就可以看到网页的结构,还有要获取的数据所对应的标签

/**@Author:Swallow*@Date:/3/21*/public class GetData {/*** 抓取什么值得买首页的精选文章* @param html* @return ArrayList<Article> articles*/public static ArrayList<Article> spiderArticle(String html){ArrayList<Article> articles = new ArrayList<>();Document document = Jsoup.parse(html);Elements elements = document.select("ul[class=feed-list-hits]").select("li[class=feed-row-wide J_feed_za ]");for (Element element : elements) {String title = element.select("h5[class=feed-block-title]").text();String author = element.select("div[class=feed-block-info]").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 url = element.select("div[class=feed-block z-hor-feed ]").select("a").attr("href");Article article = new Article(title,author,imgurl,context);articles.add(article);Log.e("DATA>>",article.toString());}return articles;}}

后面直接调用方法就可以

这里要注意一点就是,Android上面发送网络请求要放到子线程当中,所以调用的时候需要开启一个新的子线程

final String url = "/";new Thread(){public void run(){String html = OkHttpUtils.OkGetArt(url);ArrayList<Article> articles = GetData.spiderArticle(html);//发送信息给handler用于更新UI界面Message message = handler.obtainMessage();message.what = 1;message.obj = articles;handler.sendMessage(message);}}.start();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。