爬虫初识jsoup

学习了几天爬虫,发现jsoup这款工具非常好用。对于初学者解析html文件方便,可以满足简单的要求。首先jsoup要下载jar包,然后配置路径添加外部jar文件。。代码就已我的博客为例。参考jsoup中文API
Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。具体如下:

getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods)
Element siblings: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()
Graph: parent(), children(), child(int index)
元素数据
attr(String key)获取属性attr(String key, String value)设置属性
attributes()获取所有属性
id(), className() and classNames()
text()获取文本内容text(String value) 设置文本内容
html()获取元素内HTMLhtml(String value)设置元素内的HTML内容
outerHtml()获取元素外HTML内容
data()获取数据内容(例如:script和style标签)
tag() and tagName()
操作HTML和文本
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)

从一个URL加载一个Document

解决方法
使用 Jsoup.connect(String url)方法:

Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
说明
connect(String url) 方法创建一个新的 Connection, 和 get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。

Connection 接口还提供一个方法链来解决特殊请求,具体如下:

Document doc = Jsoup.connect("http://example.com")
  .data("query", "Java")
  .userAgent("Mozilla")
  .cookie("auth", "token")
  .timeout(3000)
  .post();
这个方法只支持Web URLs (http和https 协议); 假如你需要从一个文件加载,可以使用 parse(File in, String charsetName) 代替。

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 test {
    public static void main(String[] args) throws IOException
    {
        String url="https://blog.csdn.net/qq_40693171";
        Document doc=Jsoup.connect(url).get();
    //  System.out.print(doc.html());//获取整个页面的html
        Elements links1=doc.select("a");
    //  System.out.println(links1);//将输出系列a开头<a href="https://blog.csdn.net/qq_40693171">好求窈窕</a>等等
        Elements links2=doc.select("a[onclick]");
    //  System.out.println(links2);//输出有onclick选项的内容
      //<a href="https://blog.csdn.net/qq_40693171/article/details/79695414#comments" title="评论次数" onclick=********>
        Elements links3=doc.select("a[href]");
        System.out.println(links3);//输出a开头且拥有href标签的内容
        //<a href="https://blog.csdn.net/qq_40693171?viewmode=contents"><span onclick
        Element links4=doc.getElementById("popuLayer_js_q");//;按照id选取,因为id只有一个,所以这个links4为element
        //System.out.print(links4);
        Elements links5=doc.getElementsByClass("panel_body itemlist");//阅读排行
        //System.out.println(links5);输出我博客的阅读排行栏目
        Elements links6=doc.getElementsByTag("script");//按照标签 比如<a href**>的a  <script src=**>的script标签
        //System.out.println(links6);
        //<script src="https://csdnimg.cn/pubfooter/js/publib_footer-1.0.3.js?v201804111810" type="text/javascript"></script>
        /*
         * 假设要输入所有链接
         * 上面只是初步选取,仍然不是最终想要的内容
         */

        for(Element link:links3)//遍历数组
        {
            String a1=link.attr("href");//每个元素都有链接的属性href="https" 操作就像是hasmap一样的映射关系。
            System.out.print(a1);//https://blog.csdn.net/qq_40693171
            String a2=link.text();
            System.out.println(a2);//好求窈窕  ***
        }
    }
}

输出:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_40693171/article/details/80043942