`
hhyyllgg
  • 浏览: 28596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

htmlparse实践

阅读更多
   这几天小侄子天天缠着我要听儿歌,蛮横的霸占我的电脑,想着干脆帮他网站里面的中文flash都下下来,一个个下显然不符合我们程序员的风格,加上前几天单位的一个研究生问了我一些htmlparse的事(不太熟,回答不上来 ),合着今晚要熬夜看欧冠决赛,乘着决赛钱还有3个小时,来研究一下这个抓取网页内容的东东
  目标抓取网址是 http://www.qbaobei.com/里面的中文flash儿歌
先用迅雷讲列表批量下载下来,存到C:\TDDOWNLOAD\html里面,共有8 个网页

   现在的目标很简单,就是根据列表页,获取各个flash的展示页面url 然后再根据展示页面url 获取flash的播放地址,存入一个文件中

---------------------------------------------------------------------
htmlParse采用的是经典的Composite模式,通过RemarkNode,TextNode...来描述HTML页面的中的元素

htmlParse有两种方式访问网页,Visitor和FIlter方式

代码如下
public void testVistor(){
		Parser parser=new Parser();
		try {
			parser.setURL("http://www.qbaobei.com/");
			parser.setEncoding("UTF-8");
			NodeVisitor  nodeVisitor=new NodeVisitor(){
				public void visitTag(Tag tag) {
					System.out.println(tag.getTagName()+"---"+tag.getClass());
				}
			};
			parser.visitAllNodesWith(nodeVisitor);
		} catch (ParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	public void testFilter(){
		try {
			NodeFilter filter=new NodeClassFilter(LinkTag.class);
			
			Parser parser=new Parser();
			parser.setURL("http://www.qbaobei.com/");
			parser.setEncoding("UTF-8");
			NodeList list=parser.extractAllNodesThatMatch(filter);
			//循环list
		} catch (ParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}




以下是打印出所有url的代码

public  void getFlashUrl(List list,int start){
		
		try {
			NodeFilter filter=new AndFilter(new TagNameFilter("Object"),new HasAttributeFilter("id","flashObject"));
				Parser parser=new Parser();
				System.out.println("start");
			for (int s=start;s<list.size();s++) {
					count++;
					String url = (String) list.get(s);
					if("http://www.qbaobei.com/Html/erge/FZEG/09593133.htm".equalsIgnoreCase(url))
						continue;
				parser.setURL(url);
				parser.setEncoding("UTF-8");
				NodeList oblist=parser.extractAllNodesThatMatch(filter);
				//循环list
					Node node=oblist.elementAt(0);
						ObjectTag tag = (ObjectTag)node;
						if(tag!=null&&tag.getParameter("Src")!=null){
							String print=tag.getParameter("Src");
							if(!print.startsWith("http:"))
								print="http://f.qbaobei.com"+print;
							System.out.println(print);
						}
			}
			System.out.println("end");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(count);
			getFlashUrl(list,count++);
			e.printStackTrace();
		}
		
		
	}
	public  List testFilter(){
		ArrayList linkList=new ArrayList();
		try {
			NodeFilter filter=new AndFilter(new TagNameFilter("a"),new HasAttributeFilter("class","li_img w100 mgl10 mgb6 gray"));
			
			Parser parser=new Parser();
			for(int j=1;j<9;j++){
			parser.setResource("C:\\TDDOWNLOAD\\html\\index_"+j+".htm");
			parser.setEncoding("UTF-8");
			NodeList list=parser.extractAllNodesThatMatch(filter);
			//循环list
			for(int i=0;i<list.size();i++){
				Node node=list.elementAt(i);
				if(node instanceof LinkTag){
					 LinkTag link = (LinkTag)node;
					 String url=link.getLink();
					 String realLink=url.replaceAll("file://localhost/", "http://www.qbaobei.com/");
					 linkList.add(realLink);
				}
				
			}
			}
			
		} catch (ParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("共有"+linkList.size());
		return linkList;
	}
	public static void main(String[] args) {
		GetFlashUrl g=new GetFlashUrl();
		g.getFlashUrl(g.testFilter(),0);
	}
	
分享到:
评论

相关推荐

    htmlparse:使用 HTML 解析器

    在这个"htmlparse"项目中,作者可能实践了以上步骤,并尝试了不同的查找和操作方法。通过将练习整合到一个库中,作者可以方便地复用和扩展这些功能。 在学习HTML解析时,理解HTML的基本结构和语法规则很重要,比如...

    JSP搜索引擎的研究与实现(源代码+论文+答辩PPT).rar

    HTMLParse.class类文件则可能用于解析网页内容,而Index.class类文件则可能涉及到搜索引擎的核心功能——网页内容的索引。此外,从文件路径中可以看到,该项目使用了Tomcat作为Web服务器,并在WEB-INF目录下进行了...

    网络爬虫 java版

    【网络爬虫】是互联网数据获取的...对于想要学习网络爬虫或者Java数据处理的开发者来说,这是一个很好的实践案例。通过深入研究和理解该项目,不仅可以掌握网络爬虫的基本原理,还能提升Java编程和数据库操作的技能。

    李腾飞CMS 文档资料

    HTMLParse提供了一种简单的方式来解析HTML文档,通过元素树(ElementTree)结构来表示HTML页面,允许用户通过XPath或CSS选择器来查找和操作特定的HTML元素。这在进行Web爬虫开发、网站自动化测试或者数据分析时非常...

    JAVA 模拟网页是登录

    6. **实战应用**:在压缩包中的`HtmlParse`文件中,可能包含了示例代码,演示了如何结合JSOUP和Java的网络请求功能实现模拟登录。通过阅读和理解这段代码,你可以更深入地了解上述步骤的实际操作。 总的来说,Java...

    Html解析 parse html

    在IT领域,HTML(HyperText Markup ...通过学习这些示例,你可以更好地理解如何利用Qt的WebKit来解析HTML并提取JavaScript代码,这对于网络安全分析、Web应用审计以及Web内容的自动化处理都有着重要的实践价值。

Global site tag (gtag.js) - Google Analytics