Flex: 抓取网页,通过 XML 获取部分内容

样本程式的目的是到证券之星网站取得宇通客车52周和104周最高报价和最低报价。由于证券之星的网页格式不符合XML格式规范,故此不能把抓取回来的网页直接转换为 XML,需要先经过文本截取处理。Flex 利用 E4X 操作 XML 甚为方便。

 

AIR 运行效果如下图:

Flex: 抓取网页,通过 XML 获取部分内容_第1张图片

 

ClawTest.mxml 内容如下:

 

 

 1  <? xml version="1.0" encoding="utf-8" ?>
 2  < s:WindowedApplication  xmlns:fx ="http://ns.adobe.com/mxml/2009"  
 3                         xmlns:s ="library://ns.adobe.com/flex/spark"  
 4                         xmlns:mx ="library://ns.adobe.com/flex/mx" >
 5 
 6       < fx:Script >
 7           <![CDATA[
 8              
 9              // “获取”按钮点击事件
10              protected function btnGet_clickHandler(event:MouseEvent):void
11              {
12                  var request:URLRequest = new URLRequest("http://quote.stockstar.com/stock/sh_600066.htm");
13                  var loader:URLLoader = new URLLoader();
14                  loader.load(request);
15                  loader.addEventListener(Event.COMPLETE,onCompleteHandler);
16              }
17              
18              // 当网页载入完毕时触发的事件
19              private function onCompleteHandler(event:Event):void
20              {
21                  // 网页内容储存在 event.target.data 里
22                  // 这个 data 既可以被封装为 String,也可以被封装为 XML
23                  // 如果这个网页的 HTML 标记不规范、不符合 XML 格式,封装为 XML 的时候就会报错
24                  var data:String = new String(event.target.data);
25                  
26                  // 第一次截取片段
27                  var begin:int = data.indexOf("<div class=\"m_foot\">");
28                  var end:int = data.indexOf("<div class=\"m_foot_more\">");
29                  var cutdiv:String = data.substring(begin,end);
30                  
31                  // 第二次截取片段
32                  begin = cutdiv.indexOf("<table width=\"97%\" ");
33                  end = cutdiv.indexOf("</table>");
34                  var cutable:String = cutdiv.substring(begin, end+8);
35                  
36                  // 转换为 XML,如果片段内容格式不符合 XML 规范,就会报错
37                  var xml:XML = new XML(cutable);
38                  
39                  // 取得想要的内容
40                  var high52:String = xml.tr[4].td[1];
41                  var low52:String = xml.tr[4].td[2];
42                  var high104:String = xml.tr[5].td[1];
43                  var low104:String = xml.tr[5].td[2];
44                  
45                  // 呈现结果
46                  this.txtBox.text = high52 + "\n" + low52 + "\n" + high104 + "\n" + low104;            
47              }
48           ]]>
49       </ fx:Script >
50 
51       < fx:Declarations >
52           <!--  将非可视元素(例如服务、值对象)放在此处  -->
53       </ fx:Declarations >
54       < s:TextArea  x ="95"  y ="49"  id ="txtBox"  editable ="true"  enabled ="true"  width ="352"  height ="226" />
55       < s:Button  x ="237"  y ="318"  label ="获取"  id ="btnGet"  enabled ="true"  click ="btnGet_clickHandler(event)" />
56  </ s:WindowedApplication >
57 

 

 

你可能感兴趣的:(Flex: 抓取网页,通过 XML 获取部分内容)