学习了几天爬虫,发现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="评论次数" οnclick=********>
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);//好求窈窕 ***
}
}
}
输出:
- 如果对后端、爬虫等感性趣欢迎关注我的个人公众号交流:
bigsai