使用JS和HttpWatch监控携程网低价机票信息(非广告纯代码)

1、 春节回家,为了订到便宜机票,需要不停的刷新携程网来查看。时间一长,感觉又费时又费力,要不写个自动程序来定时检查提示该多好啊。为达到此目的,决定使用JS和HttpWatch实现自动监控低价机票的功能。以下是实现流程。帖不了附件很麻烦啊...

2、 总体流程

------------------------------------------------------------------------------------------

开始->分析页面->模拟访问URL->抓取请求返回消息->定位结果表->转化DOM对象验证

------------------------------------------------------------------------------------------

3、 分析请求页面,查看页面页文件(完整文件请看附件),有如下信息比较关键。可以看到在Form中有flightway(选择方式,单程,双程),homecity(出发点),destcity1(到达点)和DDatePeriod1(出发时间)几个对象。

------------------------------------------------------------------------------------------
<FORM id=flightForm οnsubmit="return false;"

action=http://flights.ctrip.com/Domestic/ShowFareFirst.aspx method=post>

<DIV class=searchbox_fah>&nbsp;<DFN>自由·机+酒特惠</DFN><A id=airHotelBtn

href="javascript:void(0);">更实惠·更便捷</A></DIV>

<TABLE class=searchbox_content_fixed>

<TBODY>

<TR>

<TH>航程类型</TH>

<TD><LABEL class=index_label><INPUT type=radio CHECKED value=Single
------------------------------------------------------------------------------------------

4、对于flightway和DDatePeriod1比较容易确认内容,但对于homecity和destcity1内容是中文、汉语拼音,还是代码,只有测试后才知道。先后试了中文、汉语拼音后还是不行。再次查看源代码,发现了如下关键信息。这不就是航空城市代码吗,试了一下,可以了。然后筛出自己关心的两个代码:KMG(昆明)和NKG(南京)。附件是测试代码

-----------------------------------------------------------------

$.module.searchBox.airHotelList="BJS,SHA,CKG,DLC,TAO,NKG,HGH,XMN,CTU,SZX,CAN,KWL,KMG,LJG,CSX,SIA,WUH,TSN,HRB,KWE,URC,HAK,HET,TYN,FOC,HFE,NGB,KHN,NNG,SHE,WNZ,CGO";

$.module.pkgSearch.pkgStartCityHash={

-----------------------------------------------------------------

5、完成以上几步分析后,可以大致通过代码查询到机票信息。剩下的工作就需要使用到HttpWatch(版本6.0.14,低版本可能会导致抓取数据乱码无法解析)来完成请求返回数据的抓取。把查询请求信息先拼接为URL串(http://flights.ctrip.com/Domestic/ShowFareFirst.aspx?homecity=KMG&destcity1=NKG&DDatePeriod1=2011-02-13)。

6、通过HttpWatch查看返回的请求详细信息,分析后知道http://flights.ctrip.com/Domestic/ShowFareFirst.aspx这个请求里包含了所需的详细信息,主要的处理也针对这个URL项来处理。附件为该请求的返回消息内容。

7、开始编写测试驱动代码,使用了HttpWatch的IE控件(只需要安装HttpWatch即包含了IE控件)。编写RetryManage对象,主要包含了一些常量定义和一些用到的变量。CONST_URL是请求的URL,MATCH_URL是用于匹配HttpWatch返回请求结果列表中我们关心的URL(一个URL请求中,服务器会返回多个URL项,包括js、图片、页面信息等内容)。MATCH_BEG_MSG是在匹配到我们所关心的信息后,从信息中找到我们关注的HTML标记。MATCH_END_MSG是结束HTML标记(查找方式很多,本例仅使用indexOf方法来获取特定内容在整个字符串的开始、结束序号,用以确定子串内容,该方法并不好,随着网站的变化就会失效)。Control保存HttpWatch控制对象(只需获取一次即可),plugin保存HttpWatch的对应IE的ActiveXObject对象。isReady表示是否上下文环境是否已准备好

-----------------------------------------------------------------

function RetryManage()

{

// const url for air tickets query

this.CONST_URL = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx?homecity=KMG&destcity1=NKG&DDatePeriod1=2011-02-13";

 

// const url for match query

this.MATCH_URL = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";

 

// const begin match tickets fee table

this.MATCH_BEG_MSG = "<table

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值