- 浏览: 168673 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
单v纯微笑:
您好,能把dbsyn_config_quartz这个表发给我一 ...
定时器(quartz+spring)读取数据库配置 -
fenglingabc:
我用了comet4j 结果因为推送比较频繁(基本上1秒一次), ...
comet4j轮询 -
NeverGiveUpToChange:
nice,还不错哦,谢谢啦!!!
springmvc上传 -
ralfsqual:
自定义的线程中的逻辑每次都是被执行两次,不知道为什么啊。比如打 ...
comet4j轮询 -
goll2012:
我倒,原来要配置tomcat。。。果然是高手,对于只看不动手的 ...
comet4j轮询
jsoup功能很强大,我用它来解析网页很轻松。但我只用了它一小部分功能,已经足矣。现在是我解析百度的一个小示例
package top100.bis;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import top100.bean.AlbumInfo;
public class Top100AlbumInfoDown {
/**
* @author hz
* 用于http://www.top100.cn巨鲸专辑下载
*/
private static String basePath = "http://www.top100.cn";
/**
* 默认构造器
*/
private Top100AlbumInfoDown(){}
/**
* 给定专辑列表页面,返回AlbumInfo列表
* @param url 带有分页参数的专辑列表地址,如:http://www.top100.cn/album/index.php?area=mainland&pages=1
* @return list
*/
private static List<AlbumInfo> parser(String urlstr){
List<AlbumInfo> infoList = new ArrayList<AlbumInfo>();
System.out.println("当前请求的url是"+urlstr);
try{
Document doc=Jsoup.connect(urlstr).timeout(10000).get(); //超时时间设置很有用
wash(doc);
String classStr1 = "Listen_allsingerbox";
Elements infoDivList1 = doc.getElementsByClass(classStr1);
if(infoDivList1==null){
return null;
}
for(Element infoDiv1:infoDivList1){
AlbumInfo albumInfo1 = getAlbumInfo(urlstr,infoDiv1);
infoList.add(albumInfo1);
}
String classStr2 = "Listen_allsingerbox top100_bgf2";
Elements infoDivList2 = doc.getElementsByClass(classStr2);
if(infoDivList2==null){
return null;
}
for(Element infoDiv2:infoDivList2){
AlbumInfo albumInfo2 = getAlbumInfo(urlstr,infoDiv2);
infoList.add(albumInfo2);
}
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
return infoList;
}
/**
* 抓取每个div中的albumInfo
* @param url
* @param infoDiv
* @return albumInfo
*/
private static AlbumInfo getAlbumInfo(String url,Element infoDiv){
AlbumInfo albumInfo = new AlbumInfo();
Element imageLink = infoDiv.getElementsByTag("a").first();
Element image=imageLink.select("img[src$=.jpg]").first();
String imageUrl=image.attr("src");
albumInfo.setAlbumImageUrl(imageUrl);
Element songLink =infoDiv.getElementsByTag("a").get(1);
String linkHref = songLink.attr("href");
albumInfo.setAlbumSongLinkUrl(basePath+linkHref);
String albumName = songLink.attr("title");
albumInfo.setAlbumName(albumName.trim());
Element abstructLink = infoDiv.getElementsByTag("p").first();
String abstruct = String.valueOf(abstructLink).replaceAll("<.*?>", "");
albumInfo.setAlbumAbstruct(abstruct);
int startIndex = url.indexOf("=");
int endIndex = url.lastIndexOf("&");
String area = url.substring(startIndex+1,endIndex);
albumInfo.setAlbumArea(area);
return albumInfo;
}
public static List<AlbumInfo> getAlbumInfoByUrl(String url){
List<AlbumInfo> list = new ArrayList<AlbumInfo>();
for(int i=1;i<SysConstant.PAGE;i++){
String temp = "&pages=";
String site = url+temp+i;//拼出带页码参数的专辑网址
//System.out.println(site);
if(site == null || "".equals(site)){
continue;
}
List<AlbumInfo> top100AlbumInfoList = parser(site);
if(top100AlbumInfoList==null){
continue;
}
list.addAll(top100AlbumInfoList);
}
HashSet<AlbumInfo> hashSet = new HashSet<AlbumInfo>(list);
list.clear();
list.addAll(hashSet);
return list ;
}
private static void wash(Document doc)
{
Elements script=doc.select("script");
for(Element element : script)
{
element.remove();
}
Elements form=doc.select("form");
for(Element element : form)
{
element.remove();
}
Elements meta=doc.select("meta");
for(Element element : meta)
{
element.remove();
}
Elements style=doc.select("style");
for(Element element : style)
{
element.remove();
}
Elements iframe=doc.select("iframe");
for(Element element : iframe)
{
element.remove();
}
Elements font=doc.select("font");
for(Element element : font)
{
element.remove();
}
}
public static void main(String[] args) {
//Top100AlbumInfoDown down = new Top100AlbumInfoDown();
String url= "http://www.top100.cn/album/index.php?area=mainland";
List<AlbumInfo> list = getAlbumInfoByUrl(url);
for(AlbumInfo tempInfo:list){
System.out.println(tempInfo.getAlbumName()+"||"+tempInfo.getAlbumSongLinkUrl());
}
}
}
发表评论
-
生成webservices代理类方法
2013-12-15 21:06 721根据wsdl成生客户端信息: 在D盘下新建一个src目录 ... -
自动补全-jquery.autocomplete.js
2013-07-08 13:58 13771研究了三天自动补全jquery.autocomplete ... -
js设置cookie
2013-06-17 13:52 1321这几天用到cookie,所以在网上搜了一下js设置cook ... -
java 获取mac地址
2013-03-20 14:20 1405一下是用java来获取mac地址,一般可用作接口权限控制 ... -
oracle数据库-使用proxool进行中断重连
2013-02-17 11:03 3204(1)proxool.xml配置项参数 <?xml ... -
jsp自定义错误页
2013-02-17 11:00 992为了给浏览者一个友好的错误提示页面,我们可以象IIS一样自定义 ... -
Spring对Hibernate事务管理的配置
2013-01-09 15:11 1006声明式事务配置主要分以下几步: 声明式事务配置 •配置 ... -
md5
2013-01-08 10:37 1107MD5是一种常用的加密算法,在项目中经常用到,我参考了网上一些 ... -
axis 自动生成webservices客户端代理类
2012-11-18 11:16 28691.新建wsdltojava.bat文件,放到C盘,文件内容如 ... -
定时器(quartz+spring)读取数据库配置
2012-08-21 15:37 19498今天把项目中的一部分移出来,主要是实现定时器任务,定时 ... -
ztree 小实例
2012-08-03 09:55 2523今天搞了一下ztree这个开源的东东,感觉很不错,很强大 ... -
java 读取.properties文件 最简单方式
2012-07-25 08:45 1127param.properties 内容如下: url ... -
Quartz入门示例
2012-05-14 17:28 1019文章出处 http://www.cnblogs.com ... -
struts2.2.3 + spring3.1.0 + mybatis3.1.0集成简单demo
2012-04-19 09:25 17601、导入相应的jar包 -
Struts2访问request,session,application的四种方式
2012-04-19 09:10 1598方式1--》访问Map类型的: package cn ... -
struts.xml动态返回结果
2012-04-11 15:51 1060今天有个难题,被我解决啦。详细的问题我就不多说了,用到的 ... -
springmvc上传
2012-04-05 15:55 5396最近一直在网上看资料,今天我在网上发现一个demo,是 ... -
fileupload多文件上传
2012-03-31 09:16 1159以前做过单文件的 ... -
解析百度输入框(在线查询)
2012-03-28 14:51 1894百度大家都会用,但是相信大家用百度的时候在输入框中随便输 ... -
ajax struts实现在线查询功能
2012-03-27 11:58 1215我用的是ajax 和struts实现的一个在线查询功能, ...
相关推荐
如果网页内容依赖JavaScript,可能需要使用如Selenium这样的工具先运行页面,再用jsoup解析生成的HTML。 **总结** jsoup是Java中处理HTML的强大工具,其简单易用的API使得网页解析变得轻松。通过学习和实践,你...
超级课程表 课程格子 教务系统抓取 SQLite Android Studio HttpWatch Jsoup解析网页
例如,你可以通过Jsoup解析整个网页,然后获取指定标签的内容,如所有的`<p>`段落或者`<a>`链接。 **二、选择器查询** Jsoup支持CSS选择器,这使得从HTML文档中定位特定元素变得非常直观。你可以使用类似于jQuery...
这个只是一个java源文件,用于学习Jsoup
相比于标准的DOM解析器,Jsoup更注重实际的网页解析需求,它的错误容忍度更高,能够处理一些不规范的HTML代码。 总结来说,Jsoup是Java开发者处理HTML时的强大工具,无论是在数据抓取、网页验证还是内容过滤等方面...
确保正确地设置User-Agent是解决Jsoup解析网页内容不一致的关键。除此之外,还要注意其他可能导致问题的因素,如Cookies、HTTP头信息、重定向处理等。在进行网络请求时,尽可能地模仿真实的浏览器行为,有助于获取...
例如,以下代码展示了如何用Jsoup解析一个网页并获取标题: ```java Document doc = Jsoup.connect("http://example.com").get(); Element title = doc.select("title").first(); System.out.println(title.text())...
三、Jsoup解析XML 虽然Jsoup主要用于HTML,但它也能处理XML文档,不过需要注意的是,XML的解析规则比HTML严格。在处理XML时,需要设置`Parser.xmlParser()`。 ```java String xml = "<root><item id='1'>Item 1...
这个压缩包文件“用Jsoup解析html的所有jar包”显然是包含了使用Jsoup进行HTML解析所需的全部依赖。 首先,我们需要了解Jsoup的基本用法。Jsoup的核心功能在于它能够通过连接到一个URL或读取本地HTML文件来获取HTML...
**使用Jsoup获取网页内容并修改** Jsoup是一款强大的Java库,它允许开发者方便地解析、操作和提取HTML内容。在Android开发中,Jsoup常用于网页数据抓取和页面内容的处理。以下将详细解释如何使用Jsoup来实现这个...
在Android开发中,Jsoup尤其有用,因为它能够帮助开发者从网页中提取结构化数据,这对于网络爬虫或者任何需要从网页获取信息的应用来说是至关重要的。 **一、Jsoup的基本用法** 1. **引入依赖** 在Android项目中...
在名为"NewSipder"的项目中,你可能正在构建一个网络爬虫,利用JSoup解析HTML内容。爬虫可能包括以下步骤: 1. **设置连接参数**:配置Jsoup连接,如超时时间、重试次数等。 2. **抓取页面**:使用`Jsoup.connect()...
**jsoup解析XML文件** jsoup是一个非常流行的Java库,主要设计用于处理HTML文档,但它也支持解析XML。这个库提供了简洁的API,使得提取和操作网页数据变得异常简便。在给定的资源中,我们可以看到一个使用jsoup解析...
此外,Jsoup还提供了链接处理能力,可以解析页面上的链接,包括相对链接和绝对链接,这对于网页爬虫和数据抓取来说非常有用。 XML解析方面,虽然Jsoup主要设计用于HTML处理,但它也具备解析XML文档的能力。XML与...
**jsoup API解析HTML** jsoup是一个非常强大的Java库,专为处理真实世界的HTML而设计。它提供了方便的API,用于提取和操作数据,使用...无论是网页抓取、数据提取还是内容修改,jsoup都能提供高效且安全的解决方案。
**Jsoup解析与使用** Jsoup是一款非常实用的Java库,专为网页抓取和解析而设计。它提供了丰富的API,使得开发者可以方便地提取结构化数据,类似于浏览器执行JavaScript的方式,但更专注于HTML文档的处理。Jsoup的...