2010-11-13 89 views
0

我们正在创建一个脚本。刮掉某些数据的网页

本质上是用户进入一个表单域:3358928 OnSubmit ajax,访问下面的页面,附加用户输入到url中的数字字符串。

http://www.fairtrading.qld.gov.au/ftlr/Default.aspx?ResultType=LNum&LNum=3358928&LType=REAL%20ESTATE&Page=1

在该网址上,是第一个有名有姓。 我们将如何刮掉名字和姓氏,并将其回显至我们的表格。

从抓取页面开始,问题就出现了。

任何帮助表示赞赏。

+0

该域名是否属于你?如果没有,你不能做你想做的事,因为AJAX只能从同一个域中检索页面。 – casablanca 2010-11-13 00:51:38

+0

我认为现在可以将ajax配置为访问ext域名。 在:http://alvinabad.wordpress.com/2009/02/13/feb13/ – 422 2010-11-13 00:54:46

+0

事实上Snook.ca和其他许多人实现跨域AJAX请求。一个这样的例子是http://www.ajax-cross-domain.com/ – 422 2010-11-13 00:57:39

回答

1

首先,您的Web服务器必须设置为代理所有客户端的请求。否则,第三方服务器would have to send an Access-Control-Allow-Origin header和访问者的浏览器将不得不支持跨域XMLHttpRequest。 (Flash/Silverlight同样需要crossdomain.xml文件。)

这正是http://ajax-cross-domain.com/的工作方式。 (这个特定的代理脚本恰好为JavaScript编码第三方服务器的响应。)

我注意到特定页面包括XHTML文档类型,这似乎表明,你可以使用本地的XMLHttpRequest的responseXML财产或jQuery(与AJAX Cross Domain相对)利用浏览器的XML解析器。不幸的是,这只是另一个输出无效的XML —的网站,它不能正确编码&符号作为&

因此,您很可能会诉诸正则表达式,即not ideal。最有可能,最简单的方法是找到td元素(依靠事实完全相同的标签没有嵌套)的文本:

// Creating the regexp object  
var regex = /<td class="BodyFont">(.*?)<\/td>/g; 

// Execute this line of code as many times as needed. 
contentsOfNextTd = regex.exec(textOfThePage)[1]; 

排序的丑,认为这将是,如果只是简单得多我们有有效的XML可以使用。如果您有选择,我会建议在自己的服务器上抓取页面,并返回格式良好的JSON或XML响应—无论如何您都需要服务器端代理,并且它会使客户端代码更简单。

+0

Hiya理想,是的,不幸的是,标签无数次重复。 伟大的回应寿,勾选:) – 422 2010-11-13 03:33:47