刚刚开始学习爬虫,因为本人是一枚初级Java工程师,平时基本上都是使用Java的,所以选择了用Java语言进行爬虫的入门语言,至于现在很热门的Python语言暂时还不熟悉,这个以后再去了解。
概述
Jsoup是Java中用于解释Html语言的API。用户可以用它来解析文本html代码,也可以直接解析url地址。把html代码加载到内存,能按需要提取所有或特定的标签或内容。Jsoup还提供select()方法,可以使用户能像使用Jquery一样获得想要内容。总之,Jsoup使用方法简单易用,直接下载Jsoup的jar包就能用了,适合新入门的Java爬虫新手。官方地址:https://jsoup.org
第一步:解析Html
方法一,使用Jsoup的parse方法,获得html。注:parse有很多重载方法,如parse(String html)直接传入一段html,parse(File file,String charsetName,String baseUrl)从文件中加载等,其他的可以查看API。
Document doc = Jsoup.parse(new File(C:/1.html),"UTF-8",String baseUrl);
//参数1:文件路径,参数3:路径url(当你以后得到相对路径时使用,如attr("abs:href"))、attr("abs:img"))能拼接得完整路径。
方法二,使用Jsoup的connent(url)方法,通过url获得html。connect会返回一个Connection对象,这时还没发出连接请求,用户可以设置各种浏览器请求头参数(伪装成浏览器),最后通过它的get()或post()方法发出对应的get/post请求。
Document doc = Jsoup.connect(this.url)
.userAgent("User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)")
.cookie("auth", "token").timeout(5000).get();
第二步:获得所需的标签
Document提供很多方法供用户获取特定的内容。title(),body() 这些我就不解释了,顾名思义吧。还能通过id,className,标签名,属性名等获得特定的标签。
//获得所有Dom
List<Element> elements = doc.getAllElements();
//获得所有a标签
List<Element> elements = doc.getElementsByTag("a");
//获得所有属性名为"Hello"的dom
List<Element> elements = doc.getElementsByAttribute("Hello");
//方法不一一举例,自己到Eclipse测试一下。
Document还提供select()方法,让用户能使用类似与JQuery获得Dom的语法去获得标签。详情看看这个网站(http://www.open-open.com/jsoup/selector-syntax.htm)。
另外,Document是继承于Element的。具体的我没有去了解,以后有机会再去深入研究。
Element的getElementByXXX()返回的仍然是Element,不难理解,Element就是html语言的一个Dom,然后Dom里面又嵌套Dom,里面又嵌套…
第三步,获得标签的内容
假定已经通过上述的方式获得了所需要的Element(Dom),那么就可以进一步得到它的属性或它所包含的内容.
举例:
<a href="/hello/gg" rel="nofollow" target="_blank">百度一下</a>
element.attr("href"); //输出/hello/gg
element.attr("abs:href") // “xxx网址"+"/hello/gg"(完整路径)
element.attributes(); //所有属性key和value
element.text(); // 百度一下
element.className(); //可以获取值同样的也可以设置值 element.attr("href","设置值");
//还有很多方法不一一解释了。
通过上述方法,可以完成一些基本爬虫任务,如爬网站文本内容、爬图片。但是只能够爬http协议的,原因是https有证书校验。本人也只是新手,日后再研究。
如果文章有一些错误,希望能告知,本人会尽快改正。