Jsoup简单使用

得到Document对象

首先得到一个Document对象:

Document document = Jsoup.connect(html).timeout(15000).get();

这里调用Jsoup的connect方法传入一个url地址或者一串HTML字符串,然后设置响应时间,最好长一点,因为有些网站响应比较慢,最后调用get()。

解析Document

这里使用Jsoup的select选择器来解析。

Element element = document.select("div.articleList").first();
    Elements hrefs = element.select("a[title]");
    for (Element ele : hrefs){
        ListBean listBean = new ListBean();
        String href = ele.attr("href");
        String title = ele.text();
    }

传入div.Class名来查找div块,a[title]查找a标签带有title关键字的语句,返回一个Elements,然后用for循环遍历所需要的内容。

Element element = document.select("[id='sina_keyword_ad_area2']").first();
                    Elements style = element.select("p");
                    String content = "";
                    for (Element element1 : style) {
                        String text = element1.text();
                        content = content + "\n" + "        " + text;
                    }

或者直接查询div中的id,[id=’sina_keyword_ad_area2’],然后查询所有p标签的内容,一般一个p标签就是一段正文。

特别的

为了防止被检测出是爬虫,可以加上请求头等信息

document = Jsoup.connect(html)
                        .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36")
                        //加上cookie信息
                        .cookie("auth", "token")
                        .header("User-Agent","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2")
                        .timeout(30000)
                        .get();


    Connection connect = Jsoup.connect(html);
    //                Map<String, String> header = new HashMap<String, String>();
    //                header.put("Host", "http://info.bet007.com");
    //                header.put("User-Agent", "  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0");
    //                header.put("Accept", "  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    //                header.put("Accept-Language", "zh-cn,zh;q=0.5");
    //                header.put("Accept-Charset", "  GB2312,utf-8;q=0.7,*;q=0.7");
    //                header.put("Connection", "keep-alive");
    //                Connection data = connect.data(header);
    //                try {
    //                    Document document = data.get();
    //                    final Element element = document.select("div[class='content b-txt1']").first();
    //                    Element element1 = document.select("div.articalContent").first();

可以加上该网站的主页地址。

官方文档

Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements links = doc.select("a[href]"); //带有href属性的a元素
Elements pngs = doc.select("img[src$=.png]");
  //扩展名为.png的图片
Element masthead = doc.select("div.masthead").first();
  //class等于masthead的div标签
Elements resultLinks = doc.select("h3.r > a"); //在h3元素之后的a元素

说明
jsoup elements对象支持类似于CSS (或jquery)的选择器语法,来实现非常强大和灵活的查找功能。.

这个select 方法在Document, Element,或Elements对象中都可以使用。且是上下文相关的,因此可实现指定元素的过滤,或者链式选择访问。

Select方法将返回一个Elements集合,并提供一组方法来抽取和处理结果。

Selector选择器概述

tagname: 通过标签查找元素,比如:a

ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 元素

.class: 通过class名称查找元素,比如:.masthead

[attr^=value], [attr$=value], [attr*=value]:

利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]

[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i).(png|jpe?g)]

*: 这个符号将匹配所有元素

Selector选择器组合使用

el#id: 元素+ID,比如: div#logo

el.class: 元素+class,比如: div.masthead

el[attr]: 元素+class,比如: a[href]

任意组合,比如:a[href].highlight

ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在”body”元素下的所有 p元素

parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素

siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div

siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p
el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo

文档地址:http://www.open-open.com/jsoup/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值