Java之Jsoup库:网络爬虫的基本使用

下面以http://news.csdn.net/news.html为爬虫示例网站进行分析,F12查看网页布局,效果如下:



从图中分析知,待扒的单个数据以unit为标签,即一个unit标签对应一个对象。

下面定义Jsoup帮助类,getRootElements()返回需要解析的对象的根标签,这里需要返回document.getElementsByClass("unit")。

anaylizeRootElement(Element rootElemen)方法中将指定的rootElemen解析成需要的对象。

package com.coca.android_unity_lab.joke;

import com.coca.unity_dev_utils.android.log.UtilsLog;import com.coca.unity_dev_utils.android.log.UtilsLogFactory;import com.coca.unity_dev_utils.java.UtilsCollections;

import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;

import java.util.List;

/** * Created by Administrator on 2016/6/16. */public abstract class JsoupHelper {    private static final UtilsLog lg = UtilsLogFactory.getLogger(JsoupHelper.class);    private Document document;

public JsoupHelper setDocument(Document document) {        this.document = document;        return this;    }

public void startAnaylizeByJsoup() {        Elements rootElements = getRootElements(document);        lg.e("开始使用Jsoup分析数据:analizeJsoup,共有数据量:" + rootElements.size());        for (Element rootElement : rootElements) {            anaylizeRootElement(rootElement);        }    }

/**     * 获取解析的根目录集合     *     * @param document     * @return     */    public abstract Elements getRootElements(Document document);

/**     * 根据每个根布局生成对应的java对象     *     * @param rootElement     * @return     */    public abstract void anaylizeRootElement(Element rootElement);}

具体使用方式如下:

jsoupHelper = new JsoupHelper() {    @Override    public Elements getRootElements(Document document) {        return document.getElementsByClass("unit");    }

@Override    public void anaylizeRootElement(Element rootElement) {        JokeAdapterEntity entity = new JokeAdapterEntity();        Element contentElement = JsoupHelper.paraseElement(rootElement, UtilsCollections.createListThroughMulitParamters("h1", "a"));        entity.setContent(contentElement.text());

Element imageElement = JsoupHelper.paraseElement(rootElement, UtilsCollections.createListThroughMulitParamters("dl", "dt", "a", "img"));        if (imageElement != null) {            lg.e("捕获到的数据:" + imageElement.attr("src"));            entity.setImgUrl(imageElement.attr("src"));        }        adapter.addDataResource(0, entity);    }};

调用方式如下,

jsoupHelper.setDocument(Jsoup.parse(response)).startAnaylizeByJsoup();

下面给出递归搜索至指定标签的方法:

/** * 递归解析标签 * @param element * @param tags 标签的依次搜索规则 * @return */public static Element paraseElement(Element element, List<String> tags) {    if (UtilsCollections.isCollectionNotEmpty(tags)) {        String parseTag = tags.get(0);        Elements elements = element.getElementsByTag(parseTag);

boolean isElementsNotEmpty = elements != null && elements.size() > 0;        lg.e("解析标签:" + parseTag + ",Size is " + (isElementsNotEmpty ? elements.size() : 0));        if (isElementsNotEmpty) {            return paraseElement(elements.first(), tags.subList(1, tags.size()));        } else {            lg.e("该标签下的Element集合为空,return null");            return null;        }    } else {        lg.e("找到指定元素");        return element;    }}



来自为知笔记(Wiz)

时间: 2024-11-05 02:17:41

Java之Jsoup库:网络爬虫的基本使用的相关文章

Android实战——jsoup实现网络爬虫,糗事百科项目的起步

Android实战--jsoup实现网络爬虫,爬糗事百科主界面 本篇文章包括以下内容: 前言 jsoup的简介 jsoup的配置 jsoup的使用 结语 前言 对于Android初学者想要做项目时,最大的烦恼是什么?毫无疑问是数据源的缺乏,当然可以选择第三方接口提供数据,也可以使用网络爬虫获取数据,这样就不用第三方数据作为支持.本来是打算爬一些购物网站的数据,由于他们的反爬做得好,所以没办法爬到数据,只能爬取糗事百科的数据,或许聪明的你会想到可以高仿个糗事百科作为自己的练手项目,利用jsoup是

JAVA平台上的网络爬虫脚本语言 CrawlScript

网络爬虫即自动获取网页信息的一种程序,有很多JAVA.C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一 个简单 的操作.鉴于这个问题,我们开发了CrawlScript这种脚本语言,程序员只需要写2-3行简单的代码,就可以制作一个强大的网络爬虫.同 时,CrawlScript由JAVA编写,可以在其他JAVA程序中被简单调用. CrawlScript是一种具有爬虫功能的javascript CrawlScript是在ECMA标准的基础上设计的语言,是一种java

Requests库网络爬虫实战

实例一:京东商品页面的爬取 import requests url = "https://item.jd.com/100004770237.html" try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[:1000]) except: print("爬取失败") 实例二:亚马逊商品页面的爬取 import requests url

【转】44款Java 网络爬虫开源软件

原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time 极简网络爬虫组件 WebFetch WebFetch 是无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫. WebFetch 要达到的目标: 没有第三方依赖jar包 减少内存使用 提高CPU利用率 加快网络爬取速度 简洁明了的api接口 能在Android设备上稳定运行 小巧灵活可以方便集成的网页抓取组件 使用...更多WebFetch信息 开源爬虫框架 Guozhong

Java实现网络爬虫

昨晚用自己写的网络爬虫程序从某网站了下载了三万多张图片,很是爽快,今天跟大家分享几点内容. 一.内容摘要 1:Java也可以实现网络爬虫 2:Jsoup.jar包的简单使用 3:可以爬某网站的图片,动图以及压缩包 4:可以考虑用多线程加快下载速度 二.准备工作 1:安装Java JDK 2:下载Jsoup.jar 3:安装Eclipse或其他编程环境 4:新建一个Java项目,导入Jsoup.jar 三.步骤 1:用Java.net包联上某个网址获得网页源代码 2:用Jsoup包解析和迭代源代码

学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic .我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设

crawler4j:轻量级多线程网络爬虫实例

crawler4j是Java实现的开源网络爬虫.提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫. 下面实例结合jsoup(中文版API),javacvs 爬取自如租房网(http://sh.ziroom.com/z/nl/)租房信息. 1.maven导入相关包 1 <dependency> 2 <groupId>edu.uci.ics</groupId> 3 <artifactId>crawler4j</artifactId> 4 &

基于HttpClient实现网络爬虫~以百度新闻为例

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/40891791 基于HttpClient4.5实现网络爬虫请訪问这里:http://blog.csdn.net/xiaojimanman/article/details/53178307 在曾经的工作中,实现过简单的网络爬虫,没有系统的介绍过,这篇博客就系统的介绍以下怎样使用java的HttpClient实现网络爬虫. 关于网络爬虫的一些理论知识.实现思想以及策略问题.能够參考百

crawler4j:轻量级多线程网络爬虫

crawler4j是Java实现的开源网络爬虫.提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫. 安装 使用Maven 使用最新版本的crawler4j,在pom.xml中添加如下片段: XHTML 1 2 3 4 5 <dependency> <groupId>edu.uci.ics</groupId> <artifactId>crawler4j</artifactId> <version>4.1</version