`
hzywy
  • 浏览: 168673 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jsoup解析网页

阅读更多

   jsoup功能很强大,我用它来解析网页很轻松。但我只用了它一小部分功能,已经足矣。现在是我解析百度的一个小示例

  package top100.bis;

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import top100.bean.AlbumInfo;

public class Top100AlbumInfoDown {
    /**
     * @author hz
     * 用于http://www.top100.cn巨鲸专辑下载
     */
    private static String basePath = "http://www.top100.cn";
    /**
     * 默认构造器
     */
    private Top100AlbumInfoDown(){}                                     
   
    /**
     * 给定专辑列表页面,返回AlbumInfo列表
     * @param url 带有分页参数的专辑列表地址,如:http://www.top100.cn/album/index.php?area=mainland&pages=1
     * @return list
     */
    private static List<AlbumInfo> parser(String urlstr){
        List<AlbumInfo> infoList = new ArrayList<AlbumInfo>();
        System.out.println("当前请求的url是"+urlstr);
        try{
            Document doc=Jsoup.connect(urlstr).timeout(10000).get();   //超时时间设置很有用
            wash(doc);
            String classStr1 = "Listen_allsingerbox";
            Elements infoDivList1 = doc.getElementsByClass(classStr1);
            if(infoDivList1==null){
                return null;
            }
            for(Element infoDiv1:infoDivList1){
                AlbumInfo albumInfo1 = getAlbumInfo(urlstr,infoDiv1);
                infoList.add(albumInfo1);
            }
            String classStr2 = "Listen_allsingerbox top100_bgf2";
            Elements infoDivList2 = doc.getElementsByClass(classStr2);
            if(infoDivList2==null){
                return null;
            }
            for(Element infoDiv2:infoDivList2){
                AlbumInfo albumInfo2 = getAlbumInfo(urlstr,infoDiv2);
                infoList.add(albumInfo2);
            }
                   
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
       
        return infoList;
    }
   
    /**
     * 抓取每个div中的albumInfo
     * @param url
     * @param infoDiv
     * @return albumInfo
     */
    private static AlbumInfo getAlbumInfo(String url,Element infoDiv){
        AlbumInfo albumInfo = new AlbumInfo();
        Element imageLink = infoDiv.getElementsByTag("a").first();
        Element image=imageLink.select("img[src$=.jpg]").first();
        String imageUrl=image.attr("src");
        albumInfo.setAlbumImageUrl(imageUrl);
       
        Element songLink =infoDiv.getElementsByTag("a").get(1);
        String linkHref = songLink.attr("href");
        albumInfo.setAlbumSongLinkUrl(basePath+linkHref);
        String albumName = songLink.attr("title");
        albumInfo.setAlbumName(albumName.trim());
       
        Element abstructLink = infoDiv.getElementsByTag("p").first();
        String abstruct = String.valueOf(abstructLink).replaceAll("<.*?>", "");
        albumInfo.setAlbumAbstruct(abstruct);
        int startIndex = url.indexOf("=");
        int endIndex = url.lastIndexOf("&");
        String area = url.substring(startIndex+1,endIndex);
        albumInfo.setAlbumArea(area);
        return albumInfo;
    }
   
    public static List<AlbumInfo> getAlbumInfoByUrl(String url){
        List<AlbumInfo> list = new ArrayList<AlbumInfo>();
        for(int i=1;i<SysConstant.PAGE;i++){
            String temp = "&pages=";
            String site = url+temp+i;//拼出带页码参数的专辑网址
            //System.out.println(site);
            if(site == null || "".equals(site)){
                continue;
            }
            List<AlbumInfo> top100AlbumInfoList = parser(site);
            if(top100AlbumInfoList==null){
                continue;
            }
            list.addAll(top100AlbumInfoList);
        }
        HashSet<AlbumInfo> hashSet = new HashSet<AlbumInfo>(list);
        list.clear();
        list.addAll(hashSet);
        return list ;
    }

     private static void wash(Document doc)
        {   
            Elements script=doc.select("script");
            for(Element element : script)
            {
                element.remove();
            }
            Elements form=doc.select("form");
            for(Element element : form)
            {
                element.remove();
            }
            Elements meta=doc.select("meta");
            for(Element element : meta)
            {
                element.remove();
            }
            Elements style=doc.select("style");
            for(Element element : style)
            {
                element.remove();
            }
            Elements iframe=doc.select("iframe");
            for(Element element : iframe)
            {
                element.remove();
            }
            Elements font=doc.select("font");
            for(Element element : font)
            {
                element.remove();
            }
        }
     
    public static void main(String[] args) {
        //Top100AlbumInfoDown down = new Top100AlbumInfoDown();
        String url= "http://www.top100.cn/album/index.php?area=mainland";
        List<AlbumInfo> list = getAlbumInfoByUrl(url);
        for(AlbumInfo tempInfo:list){
            System.out.println(tempInfo.getAlbumName()+"||"+tempInfo.getAlbumSongLinkUrl());
        }
    }
}

分享到:
评论

相关推荐

    利用jsoup解析网页

    如果网页内容依赖JavaScript,可能需要使用如Selenium这样的工具先运行页面,再用jsoup解析生成的HTML。 **总结** jsoup是Java中处理HTML的强大工具,其简单易用的API使得网页解析变得轻松。通过学习和实践,你...

    超级课程表 课程格子 教务系统抓取 SQLite Android Studio HttpWatch Jsoup解析网页.zip

    超级课程表 课程格子 教务系统抓取 SQLite Android Studio HttpWatch Jsoup解析网页

    Jsoup解析网页工具类

    例如,你可以通过Jsoup解析整个网页,然后获取指定标签的内容,如所有的`&lt;p&gt;`段落或者`&lt;a&gt;`链接。 **二、选择器查询** Jsoup支持CSS选择器,这使得从HTML文档中定位特定元素变得非常直观。你可以使用类似于jQuery...

    Jsoup 解析网页实例

    这个只是一个java源文件,用于学习Jsoup

    使用Jsoup解析html网页

    相比于标准的DOM解析器,Jsoup更注重实际的网页解析需求,它的错误容忍度更高,能够处理一些不规范的HTML代码。 总结来说,Jsoup是Java开发者处理HTML时的强大工具,无论是在数据抓取、网页验证还是内容过滤等方面...

    Jsoup解析网址与浏览器查看内容不一致

    确保正确地设置User-Agent是解决Jsoup解析网页内容不一致的关键。除此之外,还要注意其他可能导致问题的因素,如Cookies、HTTP头信息、重定向处理等。在进行网络请求时,尽可能地模仿真实的浏览器行为,有助于获取...

    httpClient采集jsoup解析

    例如,以下代码展示了如何用Jsoup解析一个网页并获取标题: ```java Document doc = Jsoup.connect("http://example.com").get(); Element title = doc.select("title").first(); System.out.println(title.text())...

    Jsoup解析html+xml

    三、Jsoup解析XML 虽然Jsoup主要用于HTML,但它也能处理XML文档,不过需要注意的是,XML的解析规则比HTML严格。在处理XML时,需要设置`Parser.xmlParser()`。 ```java String xml = "&lt;root&gt;&lt;item id='1'&gt;Item 1...

    用Jsoup解析html的所有jar包

    这个压缩包文件“用Jsoup解析html的所有jar包”显然是包含了使用Jsoup进行HTML解析所需的全部依赖。 首先,我们需要了解Jsoup的基本用法。Jsoup的核心功能在于它能够通过连接到一个URL或读取本地HTML文件来获取HTML...

    使用jsoup获取网页内容并修改

    **使用Jsoup获取网页内容并修改** Jsoup是一款强大的Java库,它允许开发者方便地解析、操作和提取HTML内容。在Android开发中,Jsoup常用于网页数据抓取和页面内容的处理。以下将详细解释如何使用Jsoup来实现这个...

    Jsoup解析html的示例

    在Android开发中,Jsoup尤其有用,因为它能够帮助开发者从网页中提取结构化数据,这对于网络爬虫或者任何需要从网页获取信息的应用来说是至关重要的。 **一、Jsoup的基本用法** 1. **引入依赖** 在Android项目中...

    jsoup解析HTML

    在名为"NewSipder"的项目中,你可能正在构建一个网络爬虫,利用JSoup解析HTML内容。爬虫可能包括以下步骤: 1. **设置连接参数**:配置Jsoup连接,如超时时间、重试次数等。 2. **抓取页面**:使用`Jsoup.connect()...

    jsoup解析xml文件

    **jsoup解析XML文件** jsoup是一个非常流行的Java库,主要设计用于处理HTML文档,但它也支持解析XML。这个库提供了简洁的API,使得提取和操作网页数据变得异常简便。在给定的资源中,我们可以看到一个使用jsoup解析...

    Jsoup库文件;Jsoup解析Java包

    此外,Jsoup还提供了链接处理能力,可以解析页面上的链接,包括相对链接和绝对链接,这对于网页爬虫和数据抓取来说非常有用。 XML解析方面,虽然Jsoup主要设计用于HTML处理,但它也具备解析XML文档的能力。XML与...

    jsoupAPI解析html

    **jsoup API解析HTML** jsoup是一个非常强大的Java库,专为处理真实世界的HTML而设计。它提供了方便的API,用于提取和操作数据,使用...无论是网页抓取、数据提取还是内容修改,jsoup都能提供高效且安全的解决方案。

    Jsoup解析与使用

    **Jsoup解析与使用** Jsoup是一款非常实用的Java库,专为网页抓取和解析而设计。它提供了丰富的API,使得开发者可以方便地提取结构化数据,类似于浏览器执行JavaScript的方式,但更专注于HTML文档的处理。Jsoup的...

Global site tag (gtag.js) - Google Analytics