2010-11-13 135 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