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

使用watij和xpath实现自动spider(完善中)

阅读更多
watij本来是用于web测试的,但是我发现利用它来做垂直爬虫,效果也很好
以下的代码抓了三个网站
package com.example.tests;

import watij.runtime.ie.IE;
import watij.finders.AttributeFinder;
import watij.finders.Finder;
import watij.finders.NameFinder;
import watij.finders.XPathFinder;
import watij.finders.FinderFactory.*;
import watij.elements.*;


public class WatijHotel {
	public static void main(String[] args){
		IE ie = new IE(),new_ie=null;
		IE iectrip=null,ieelong=null;
		try {
			ie.start("http://hotel.qunar.com");
			//ie.textField(new NameFinder("toCity")).set("北京");
			//click("hchkParaSeachElong");
			ie.checkbox(new AttributeFinder("id","hchkParaSeachElong")).click();
			ie.button(new AttributeFinder("id","hbtnSearch")).click();
			Links ls = ie.links(new AttributeFinder("target","_blank"));
			//System.out.println(ls.toString());
			ls.link(0).click();
			new_ie = ie.childBrowser();
			//System.out.println(new_ie.text());
			//ie.link(new XPathFinder("//DIV[@id='jxContentPanel']//DIV[1]//DIV[1]//DIV[2]/A")).click();
			new_ie.waitUntilReady(1000);
			String text = new_ie.div(new AttributeFinder("class","detailInfoLinks")).text();
			System.out.println(text);
			String[] links = text.split("\\)");
			String ctrip = "携程旅行网";
			String elong = "艺龙旅行网";
			String tctrip = "",telong="";
			System.out.println(new_ie.childBrowserCount());
			
			for(String link : links){			
				if(link.indexOf(ctrip)>=0){
					try {
						new_ie.link("预订网站").click();
						tctrip = link + ")";
						new_ie.link(tctrip).click();
						String qunarprice = new_ie.table(
								new AttributeFinder("class", "bookingTable"))
								.text();
						System.out.println(qunarprice);
						new_ie.table(
								new AttributeFinder("class", "bookingTable"))
								.links().get(0).click();
						int count = new_ie.childBrowserCount();
						System.out.println(new_ie.childBrowserCount());
						iectrip = new_ie.childBrowser(count - 1);
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else if(link.indexOf(elong)>=0){
					try {
						new_ie.link("预订网站").click();
						// table class="bookingTable"
						telong = link + ")";
						new_ie.link(telong).click();
						String qunarprice = new_ie.table(
								new AttributeFinder("class", "bookingTable"))
								.text();
						System.out.println(qunarprice);
						new_ie.table(
								new AttributeFinder("class", "bookingTable"))
								.links().get(0).click();
						int count = new_ie.childBrowserCount();
						// System.out.println(new_ie.childBrowserCount());
						ieelong = new_ie.childBrowser(count - 1);
						// div class="taL left10_dbk2
						
						
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
			if(ieelong != null){
				ieelong.waitUntilReady(10000);
				// table class="border_2"
				ieelong.waitUntilReady(20);
				ieelong.div(new AttributeFinder("class", "taL left10_dbk2")).link(0).click();
				//ieelong.executeScript("HotelDetails('50101472','rate','eLong')");
				ieelong.waitUntilReady(10000);				
				//ieelong.div(new AttributeFinder("class", "taL left10_dbk2"));
				//System.out.println("ieelong=" + ieelong.text());
				// form id="HotSrch"
				//ieelong.table();
				System.out.println(ieelong.text());
				//System.out.println(elongprice);
			}
			if(iectrip != null){
				iectrip.waitUntilReady(10000);
				// table class="pubGlobal_romList01"
				String ctripprice = iectrip.table(new AttributeFinder("class","pubGlobal_romList01")).text();
				System.out.println(ctripprice);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(ie != null)
					ie.close();
				if(new_ie != null)
					new_ie.close();
				if(ieelong != null)
					ieelong.close();
				if(iectrip != null)
					iectrip.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
}
分享到:
评论
2 楼 lsb_48 2009-09-02  
你好,有关于watij的问题想请交,麻烦你了,很急
QQ:2024486
1 楼 kqy929 2008-09-05  
能否介绍下你的解决方案?
最近由于工作需要也得做过类似的spider。
kqy929@126.com

相关推荐

    Selenium WebDriver中使用By.Xpath快速定位页面元素

    在 Selenium WebDriver 中使用 By.Xpath 快速定位页面元素可以实现多属性定位一个元素。例如,在登录页面密码框定位中,可以使用 By.Xpath 来定位密码框,然后进行清空和输入密码操作。 使用 By.Xpath 定位页面元素...

    Xpath生成器,自动生成XPATH,C#版

    项目中的`remi.txt`可能包含了生成器的使用说明、开发者注释或源代码的一部分,而`XpathTest`可能是一个测试用例或测试脚本,用于检验XPath生成器的功能和性能。 XPath在开发中有着广泛的应用,例如网页抓取、XML...

    Python使用xpath实现图片爬取

    在这个场景中,我们将讨论如何使用Python的`lxml`库结合XPath来实现图片的爬取。`lxml`库提供了高效的XML和HTML处理能力,支持XPath 1.0规范。 首先,让我们了解基本的XPath语法。XPath通过路径表达式来选取XML或...

    Xpath生成器,自动生成可用的Xpath。

    Xpath生成器,可以通过输入的文件,进行匹配,生成全部可用的Xpath,犹豫HTML中部分标签允许无结束,如:("LINK" ,"META","SCRIPT","IMG" ,"INPUT", "FORM")故已经被忽略,如有朋友发现其中有问题,请告诉我哦...

    Java中使用xpath获取xml中的数据

    下面是一段简单的示例代码,展示了如何在Java中使用XPath获取XML数据: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; ...

    实验3XML文件映射与转换(使用XSLT和XPath)

    【实验3XML文件映射与转换(使用XSLT和XPath)】 实验主要涉及XML、XSLT和XPath这三个核心技术,它们在数据处理和信息展示中扮演着重要角色。 XML(Extensible Markup Language)是一种标记语言,用于描述数据结构...

    自动化测试工程师的xpath实用技巧总结

    通过上述技巧的学习,我们可以更加灵活地使用XPath来进行元素定位,这对于自动化测试工程师来说是非常重要的技能。无论是面对复杂的页面结构还是变化多端的元素属性,掌握好XPath都能让我们事半功倍。希望本文的内容...

    XPath注入漏洞利用工具XPath-XCat.zip

    XCat是一个命令行程序,用于辅助XPath注入漏洞的利用。XCat使用Python编写并开放源代码。XCat正常使用需要python的SimpleXMLWriter模块。 标签:XPath

    XPath Helper版本2.0.2

    通过编写XPath表达式,可以准确地定位到网页上的按钮、链接或其他交互元素,从而实现自动点击、填写表单等操作。此外,对于数据抓取项目,XPath可以快速定位到网页上的特定数据块,如新闻标题、评论内容等,大大提高...

    Python自动化xpath实现自动抢票抢货

    在本文中,我们将深入探讨如何使用Python自动化工具Selenium结合XPath来实现自动抢票或抢购功能。XPath是一种在XML文档中查找信息的语言,也可以在HTML文档中使用,尤其是在自动化测试和网页抓取中非常常见。 首先...

    获取网页上 xpath , css 路径的插件, 方便爬虫、自动化测试相关软件工作者快速获取页面上html元素路径

    在IT行业中,尤其是在网页爬虫和自动化测试领域,获取网页上的XPath和CSS选择器路径是一项基本且重要的技能。XPath和CSS选择器是两种常见的定位HTML元素的方法,它们被广泛用于网页抓取、网页自动化和测试工具中。这...

    IE下获取XPATH小工具源码_xpath_

    5. **浏览器兼容性**:虽然题目中提到的是IE,但考虑到现代开发环境,小工具可能还需要处理其他浏览器,如Firefox、Chrome等,它们使用不同的DOM和XPath实现。因此,代码可能需要进行条件判断或使用浏览器API来实现...

    xpath-helper 插件及使用方法

    5. **应用到项目**:将生成的XPath应用于自动化脚本或数据抓取程序中,实现对网页元素的选取和操作。 在实际开发中,XPath Helper能够极大地提升工作效率,简化Web开发和数据抓取的工作流程。它不仅可以帮助初学者...

    javascript XPath 实现

    这篇博文“javascript XPath 实现”可能详细介绍了如何在JavaScript中使用XPath来查询和操作XML文档。 首先,XPath的基本概念包括路径表达式、轴、节点测试和谓语等。路径表达式用于描述XML文档中的节点路径,如"/...

    JDOM中XPath.selectNodes()和XPath.selectSingleNode()用法

    在Java开发中,XML处理是常见的任务之一,...在提供的`jdomdemo`压缩包文件中,可能包含了一个或者多个示例程序,演示了如何使用JDOM和XPath进行XML处理。你可以解压并运行这些程序,以便更直观地理解它们的工作原理。

    dom4j和xpath必备jar包

    将这些jar包添加到项目的类路径中,开发者就可以在代码中直接调用DOM4J和XPath的功能,实现对XML文档的强大操作。 总之,DOM4J和XPath是XML处理领域的重要工具,它们为Java开发者提供了强大而灵活的XML处理能力,...

    一个简单的爬虫demo使用了一些Xpath技术

    总结,这个爬虫demo是学习和实践Xpath技术的良好起点,它揭示了如何使用Python和Xpath来提取网页数据,这对于数据分析、信息监控或者构建定制化的信息获取系统都是非常有价值的技能。同时,理解并熟练掌握Xpath可以...

    XPathHelper_2.0.2.zip

    XPath在Web开发中起着至关重要的作用,尤其是在进行自动化测试、数据提取和网页抓取时。XPath Helper通过提供直观的用户界面,使得用户可以直接在浏览器中输入XPath查询,实时查看查询结果,极大地简化了这个过程。 ...

    火狐老版本+xpath插件(适合python+xpath爬虫使用)

    XPath是一种在XML文档中查找信息的语言,对于数据提取和解析尤其有效。在这个压缩包中,我们找到了火狐的老版本浏览器和一个专门针对XPath的插件,这对于Python开发者来说,是一个极好的工具集,可以方便地进行网页...

Global site tag (gtag.js) - Google Analytics