使用Jsoup函数包抓取网页内容
之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来。抓取的结果是一整个字符串。如果要提取网页中的某个元素或者链接,还需要用正则表达式来查找匹配。
最近看到利用Jsoup库函数可以方便的分析html文件。函数库本身很小,不到2Mb,本领却很大。先用url创建一个Document类的对象,再按照css的格式把链接、图片、文本一一分解出来。比如,我写了一段代码把17届中央委员、候补中央委员、中央纪委委员的百度百科词条链接都抓取到。若逐条解析这些链接,又可以提取其它信息。原代码如下:
package CPCsearch; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import BaikeCard.PersonCard; public class No17Committee { /**
* @param args
*/
private static Map<String, String> urllist = new HashMap<String, String>(); public static void setURLlist() throws IOException{
String originalurl = "http://baike.baidu.com/searchword/?word="
+"中国XX党第十七届中央委员会"+"&pic=1&sug=1&enc=utf-8";
System.out.println(originalurl);
Document doc = Jsoup.connect(originalurl).get();
Element lemmacontent = doc.select("div#lemmaContent-0").first();
Elements links = lemmacontent.select("a[href]");
for(Element link:links){
if(link.text().length()<=10){
String urladdress = link.attr("abs:href");
String name = link.text();
urllist.put(name, urladdress);
}
} } public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
setURLlist();
for(Map.Entry entry:urllist.entrySet()){
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
System.out.println(urllist.size());
} }
这里是扑捉到的结果:
中国XX党第十七届中央委员会委员、候补委员、第十七届中央纪律检查委员会委员的百度百科页面链接:
王旭东 http://baike.baidu.com/view/34770.htm
李盛霖 http://baike.baidu.com/view/34722.htm
田成平 http://baike.baidu.com/view/34605.htm
宋秀岩 http://baike.baidu.com/view/122092.htm
胡泽君 http://baike.baidu.com/view/967656.htm
王兆国 http://baike.baidu.com/view/1844.htm
路甬祥 http://baike.baidu.com/view/1860.htm
王太华 http://baike.baidu.com/view/35988.htm
迟万春 http://baike.baidu.com/view/325028.htm
刘奇葆 http://baike.baidu.com/view/303958.htm
王国生 http://baike.baidu.com/view/767111.htm
王沪宁 http://baike.baidu.com/view/159348.htm
张庆伟 http://baike.baidu.com/view/117230.htm
袁家军 http://baike.baidu.com/view/51855.htm
徐绍史 http://baike.baidu.com/view/924447.htm
刀林荫 http://baike.baidu.com/view/795154.htm
金振吉 http://baike.baidu.com/view/624679.htm
张平 http://baike.baidu.com/view/124481.htm
谌贻琴 http://baike.baidu.com/view/768829.htm
梁光烈 http://baike.baidu.com/view/28711.htm
杨利伟 http://baike.baidu.com/view/27767.htm
靖志远 http://baike.baidu.com/view/325364.htm
孙忠同 http://baike.baidu.com/view/325023.htm
陆浩 http://baike.baidu.com/view/119638.htm
吴定富 http://baike.baidu.com/view/321120.htm
李学勇 http://baike.baidu.com/view/282960.htm
刘玉浦 http://baike.baidu.com/view/304626.htm
王宪魁 http://baike.baidu.com/view/576688.htm
陈川平 http://baike.baidu.com/view/1216672.htm
李金城 http://baike.baidu.com/view/1215488.htm
朱明国 http://baike.baidu.com/view/304539.htm
实在是因为敏感词太多了,只能放出一部分。。。
使用Jsoup函数包抓取网页内容的更多相关文章
- paip.抓取网页内容--java php python
paip.抓取网页内容--java php python.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- Asp.Net 之 抓取网页内容
一.获取网页内容——html ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest.WebResponse.StreamRea ...
- ASP.NET抓取网页内容的实现方法
这篇文章主要介绍了ASP.NET抓取网页内容的实现方法,涉及使用HttpWebRequest及WebResponse抓取网页内容的技巧,需要的朋友可以参考下 一.ASP.NET 使用HttpWebRe ...
- ASP.NET抓取网页内容
原文:ASP.NET抓取网页内容 一.ASP.NET 使用HttpWebRequest抓取网页内容 这种方式抓取某些页面会失败 不过,有时候我们会发现,这个程序在抓取某些页面时,是获不到所需的内容的, ...
- c#抓取网页内容乱码的解决方案
写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Ty ...
- C# 抓取网页内容的方法
1.抓取一般内容 需要三个类:WebRequest.WebResponse.StreamReader 所需命名空间:System.Net.System.IO 核心代码: view plaincopy ...
- 6 wireshark 安装使用 数据包抓取
1.wireshark安装 2.开始使用 3.界面详情 4. 数据包抓取 5.过滤数据
- ASP.NET 抓取网页内容
(转)ASP.NET 抓取网页内容 ASP.NET 抓取网页内容-文字 ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest. ...
- 爬虫学习一系列:urllib2抓取网页内容
爬虫学习一系列:urllib2抓取网页内容 所谓网页抓取,就是把URL地址中指定的网络资源从网络中读取出来,保存到本地.我们平时在浏览器中通过网址浏览网页,只不过我们看到的是解析过的页面效果,而通过程 ...
随机推荐
- iOS app调试的黑魔法--第三方库
http://www.cocoachina.com/ios/20140928/9785.html
- SelectedRows.CurrentRowSelected 和 DeleteItem
procedure TBMListEh.SetCurrentRowSelected(Value: Boolean); var Index: Integer; Current: TUniBookmark ...
- bzoj 1185 旋转卡壳 最小矩形覆盖
题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...
- 修改Centos SSH远程端口
1. 在防火墙添加开放端口10000:本机防火墙和云防火墙 本机防火墙:-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACC ...
- Android类参考---Fragment
Android类参考---Fragment public final boolean isAdded() 如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回fal ...
- 加载不同的nib文件
只需要实现nibName方法即可 另外还需在vc控制器初始化的时候不指定对应的nib文件名 -(NSString *)nibName { if(UI_USER_INTERFACE_IDIOM() == ...
- ajax 中的一些方法应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- keil(持续更新)
1函数格式提示 2 cording时有警告和错误提示 3 类的成员 提示
- C++ shared_ptr deleter的实现
#include <iostream>#include <memory>using namespace std; #include<iostream>class s ...
- iOS探索:对NSArray中自定义的对象进行排序
http://mobile.51cto.com/hot-434804.htm 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天 ...