jsoup web scraping

jsoup简介



jsoup是一款HTML解析器,可用与解析URL地址、HTML文本内同等,操作类似于jQuery,可通过DOM查找数据,操作数据, 使用时需引入jsoup jar

jsoup可以从包含字符串、url及本地文件加载html文档,生成Document对象,通过Document对象即可操作文档中的数据

eg:

 //通过url
Document doc = Jsoup.connect("http://www.cnblogs.com/wishyouhappy").get();

//通过html 字符串
String html = "<html><head></head> <body><p>#####</p></body></html>";
Document  doc = Jsoup.parse(html);

//通过文件加载,第三个参数指示baseURL
 File input = new File("D:/test.html");
 Document doc = Jsoup.parse(input,"UTF-8","http://www.cnblogs.com/wishyouhappy");

数据操作eg:

Document doc = Jsoup.connect("http://www.cnblogs.com/wishyouhappy").get();
System.out.println(doc.title());

常用函数



parse相关:

static Document parse(File in, String charsetName)
static Document parse(File in, String charsetName, String baseUri)
static Document parse(InputStream in, String charsetName, String baseUri)
static Document parse(String html)
static Document parse(String html, String baseUri)
static Document parse(URL url, int timeoutMillis)
static Document parseBodyFragment(String bodyHtml)
static Document parseBodyFragment(String bodyHtml, String baseUri) 

url connect相关:

Connection connect(String url) //根据给定的url(必须是http或https)来创建连接

Connection cookie(String name, String value) //发送请求时放置cookie
Connection data(Map<String,String> data) //传递请求参数
Connection data(String... keyvals) //传递请求参数

Document get() //以get方式发送请求并对返回结果进行解析
Document post()//以post方式发送请求并对返回结果进行解析 

Connection userAgent(String userAgent)
Connection header(String name, String value) //添加请求头
Connection referrer(String referrer) //设置请求来源

获取html元素:

getElementById(String id) //用id获得元素
getElementsByTag(String tag) //用标签获得元素
getElementsByClass(String className) //用class获得元素
getElementsByAttribute(String key)  //用属性获得元素

siblingElements(),
firstElementSibling(),
lastElementSibling();
nextElementSibling(),
previousElementSibling()

获取和设置元素的值:

attr(String key)  //获得元素的数据
attr(String key, String value) //设置元素数据
attributes() //获得所以属性
id(),
className()
classNames()
text() //获得文本值
text(String value) //设置文本值
html() //获取html
html(String value)//设置html
outerHtml()
data()
tag()  //获得tag
tagName() //获得tagname 

添加元素:

append(String html),
prepend(String html)
appendText(String text),
prependText(String text)
appendElement(String tagName),
prependElement(String tagName)

选择器:


tagname 使用标签名来定位,例如 a
ns|tag 使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素
#id 使用元素 id 定位,例如 #logo
.class 使用元素的 class 属性定位,例如 .head
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] 使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value], [attr$=value], [attr*=value] 这三个语法分别代表,属性以 value 开头、结尾以及包含
[attr~=regex] 使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)]
* 定位所有元素
el#id 定位 id 值某个元素,例如 a#logo -> <a id=logo href= … >
el.class 定位 class 为指定值的元素,例如 div.head -> <div class="head">xxxx</div>
el[attr] 定位所有定义了某属性的元素,例如 a[href]
以上三个任意组合 例如 a[href]#logo 、a[name].outerlink
ancestor child 这五种都是元素之间组合关系的选择器语法,其中包括父子关系、合并关系和层次关系。
parent > child  
siblingA + siblingB  
siblingA ~ siblingX  
:lt(n) 例如 td:lt(3) 表示 小于三列
:gt(n) div p:gt(2) 表示 div 中包含 2 个以上的 p
:eq(n) form input:eq(1) 表示只包含一个 input 的表单
:has(seletor) div:has(p) 表示包含了 p 元素的 div
:not(selector) div:not(.logo) 表示不包含 class="logo" 元素的所有 div 列表
:contains(text) 包含某文本的元素,不区分大小写,例如 p:contains(oschina)
:containsOwn(text) 文本信息完全等于指定条件的过滤
:matches(regex) 使用正则表达式进行文本过滤:div:matches((?i)login)
:matchesOwn(regex) 使用正则表达式找到自身的文本

例子:


package jsoup;

/**
 *
 * 创建人:wish
 * 创建时间:2014年6月13日 下午1:22:49
 */
import java.io.IOException;

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

public class BlogCatch {
    /**
     * main
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {

       // getArticleTitle("http://www.cnblogs.com/wishyouhappy");
        Document doc = Jsoup.connect("http://www.cnblogs.com/wishyouhappy")
                .data("query", "Java")   // 请求参数
                .userAgent("I ’ m jsoup") // 设置 User-Agent
                .cookie("auth", "token") // 设置 cookie
                .timeout(3000)           // 设置连接超时时间
                .post();
        System.out.println(doc.title());
    }

    /**
     * 获取指定HTML 文档指定的body
     * 传入html string
     * @throws IOException
     */
    @SuppressWarnings("unused")
    private static void getBlogBodyByString(String html) {
        Document doc = Jsoup.parse(html);
        System.out.println(doc.body());
    }

    /**
     *
     * getBlogBodyByURL 通过url获取文档body
     * @param   url
     * @return
     *
     */
    @SuppressWarnings("unused")
    private static void getBlogBodyByURL(String url) throws IOException {
        // 从 URL 直接加载 HTML 文档
        Document doc2 = Jsoup.connect(url).get();
        String title = doc2.body().toString();
        System.out.println(title);
    }

    /**
     *
     * article 获取博客上的文章标题和链接
     * @param   url
     * @return
     * @Exception 异常对象
     */
    public static void getArticleTitle(String url) {
        Document doc;
        try {
            doc = Jsoup.connect(url).get();
            Elements ListDiv = doc.getElementsByAttributeValue("class","postTitle");
            for (Element element :ListDiv) {
                Elements links = element.getElementsByTag("a");
                for (Element link : links) {
                    String linkHref = link.attr("href");
                    String linkText = link.text().trim();
                    System.out.println(linkHref);
                    System.out.println(linkText);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     *
     * getBlog 获取指定博客文章的内容
     * @param   name
     * @return
     * @Exception 异常对象
     */
    public static void getBlog(String url) {
        Document doc;
        try {
            doc = Jsoup.connect(url).get();
            Elements ListDiv = doc.getElementsByAttributeValue("class","postBody");
            for (Element element :ListDiv) {
                System.out.println(element.html());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

jsoup web scraping,布布扣,bubuko.com

时间: 2024-08-11 11:47:29

jsoup web scraping的相关文章

Free web scraping | Data extraction | Web Crawler | Octoparse, Free web scraping

Free web scraping | Data extraction | Web Crawler | Octoparse, Free web scraping 人才知了

Web Scraping using Python Scrapy_BS4 - Introduction

What is Web Scraping This is also referred to as web harvesting and web data extraction. This is the process of automatically downloading a web page's data and extracting information from it. Benefits of Web Scraping Component of applications used fo

Web Scraping(网页抓取)基本原理 - 白话篇

本文主要介绍 Web Scraping 的基本原理,基于Python语言,大白话,面向可爱的小白(^-^). 易混淆的名称: 很多时候,大家会把,在网上获取Data的代码,统称为"爬虫", 但实际上,所谓的"爬虫",并不是特别准确,因为"爬虫"也是分种的, 常见的"爬虫"有两种: 网路爬虫 (Web Crawler),又称 Spider:Spiderbot 网页抓取 (Web Scraper),又称 Web Harvestin

Web Scraping with Python第一章

1. 认识urllib urllib是python的标准库,它提供丰富的函数例如从web服务器请求数据.处理cookie等,在python2中对应urllib2库,不同于urllib2,python3的urllib被分为若干子模块:urllib.request.urllib.parse.urllib.error等,urllib库的使用可以参考https://docs.python.org/3/library/urllib.html from urllib.request import urlop

Matlab 爬虫 Web Scraping with Matlab 01--认识基本函数webread

注:以下内容部分来自于mathworks webread 从 RESTful Web 服务读取内容 1.RESTful REST 表示表述性状态转移 (representational state transfer),Web 服务的一种常用体系结构样式.RESTful 接口提供标准的 HTTP 方法,例如 GET.PUT.POST 或 DELETE. 随着 REST 成为大多数 Web 和 Mobile 应用的默认选择,势必要对它的基本原理有所了解. 在它提出十多年后的今天,REST 已经成为最

阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl

1.函数调用它自身,这样就形成了一个循环,一环套一环: from urllib.request import urlopen from bs4 import BeautifulSoup import re pages = set() def getLinks(pageUrl): global pages html = urlopen("http://en.wikipedia.org"+pageUrl) bsObj = BeautifulSoup(html,"lxml"

阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href

1.查找以<a>开头的所有文本,然后判断href是否在<a>里面,如果<a>里面有href,就像<a href=" " >,然后提取href的值. from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon") bsObj = Beaut

Step by Step of &quot;Web scraping with Python&quot; ----Richard Lawson ---3/n

when trying the sample code of "link_crawler3.py", it will always fail with below message: /usr/bin/python3 /home/cor/webscrappython/Web_Scraping_with_Python/chapter01/link_crawler3.py Downloading:http://example.webscraping.com Downloading--2 Do

web data scraping的各种解决方案

对于互联网人来说,web data scraping (web数据采集)已经成为一个迫切而又实在的需求.在如今这个开源的时代,问题往往不在于是否有解决方案,而是如何选择适合你的解决方案,因为总是有很多潜在的方案供你选择.web data scraping当然也不例外,笔者认为,我们至少有四种类型的方案可以选择, 1. web scraping software 专用的数据采集软件不需要你编写任何代码,你只需要配置一些信息,例如采集的目标网址.兴趣字段等等.然而,学习如何使用这些软件却是一项非常费