Objective c 如何从iOS的javascript页面抓取数据?

Objective c 如何从iOS的javascript页面抓取数据?,objective-c,ios5,web-scraping,Objective C,Ios5,Web Scraping,我正在开发一款移动应用程序(兼容iOS 5.0及以上版本),用户可以直接从登录页查看某些数据。用户可以通过选择特定选项(即位置和/或日期)来优化结果。他们不提供任何web服务调用,也不允许我们访问他们的数据库。因此,我收集数据的唯一途径就是直接“抓取”网站 我的问题是,我不知道用户如何通过手机的http请求在站点上进行更改。例如,以下网站: 可以使用以下命令从站点中提取并保存为字符串 NSString *html = [NSString stringWithContentsOfURL:urlr

我正在开发一款移动应用程序(兼容iOS 5.0及以上版本),用户可以直接从登录页查看某些数据。用户可以通过选择特定选项(即位置和/或日期)来优化结果。他们不提供任何web服务调用,也不允许我们访问他们的数据库。因此,我收集数据的唯一途径就是直接“抓取”网站

我的问题是,我不知道用户如何通过手机的http请求在站点上进行更改。例如,以下网站:

可以使用以下命令从站点中提取并保存为字符串

NSString *html = [NSString stringWithContentsOfURL:urlrequest encoding:NSUTF8StringEncoding error:&err];
我能够分离相关数据:

// I decided to add the script function name in case anyone wanted to look for themselves
<script type="text/javascript" language="Javascript">
//<![CDATA[
function loadData(){

var winMsgTitle = "Date: 04/11/2012";

// this is the actual data I'm concerned with:
gLatLong = new GLatLng(31.59019444444444, -110.50655555555555);
tmpMapIcon = new MapIcon("0_0", 21, 15);
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", ".84", "5711", "2012", "", "07:00"), tmpMapIcon);
map.addOverlay(marker);
point = null;marker = null;
gLatLong = new GLatLng(32.2938260182, -110.7896411419);
tmpMapIcon = new MapIcon("0_0", 21, 15);
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", "1.00", "1254", "2012", "", "07:00"), tmpMapIcon);
map.addOverlay(marker);
point = null;marker = null;
gLatLong = new GLatLng(33.5966853633, -112.1744066477);
tmpMapIcon = new MapIcon("0_0", 21, 15);
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", ".70", "256", "2012", "", "07:00"), tmpMapIcon);
map.addOverlay(marker);
point = null;marker = null;
//我决定添加脚本函数名,以防有人想自己寻找

// 我想您应该使用UIWebView加载该页面

一种可能的解决方案是在右侧窗格中编写JavaScript函数来模拟正常的用户操作(例如,使用jQuery的触发器函数来选择下拉列表,选择“日期范围”,等等)

这些javascript函数可以在应用程序代码中编码为字符串

然后,在webview上调用
stringByEvaluatingJavaScriptFromString:
,以运行以下javascript函数:

[webView stringByEvaluatingJavaScriptFromString:javascript]
这里的javascript参数是您构造的一个字符串,用于调用javascript函数。例如:

NSString *javascript = [NSString stringWithFormat:@"selectRegion(%@)", targetRegion];

在执行此操作时,我建议您编写这些Java脚本,并使用浏览器的调试工具(Safari的Web Inspector、Firefox的FireBug插件…)对其进行测试,以确保它们首先按预期工作。

如果我理解正确,您希望在不向用户显示网站的情况下提取数据吗

如果是的话,我目前能想到的唯一解决方案是一个屏幕外的UIWebView,您可以使用一些JavaScript魔术来模拟用户输入,然后取出数据

然而,这是一种非常黑客的方法,我不建议您在装运应用程序中使用此方法。
事实上,我建议不要做任何网站垃圾,因为如果他们改变他们的网站结构,你的应用程序将无法工作

如果你真的在为他们开发一个应用程序,那就告诉他们你需要一个Web服务来编写一个好的应用程序


如果你不是“为他们”工作,而只是试图编写一个使用他们的服务获取数据的应用程序,那么你所做的不仅是复杂的,而且很可能也违反了他们的EULA,因此你根本不应该这样做。考虑联系他们,看看你能不能让他们和你一起工作。在这种情况下,我发现网站有一个“Load DATA”函数,我可以从Mozilla的Web控制台调用,它包含了我需要的所有内容。可以直接调用这个函数吗?他们的android应用程序就是这么做的。我也为“他们”和我的老师工作;)。因此,web服务的设置无法立即使用。我计划与他们交谈,并强烈建议他们实现某种被称为web服务的web服务。然而,在这种情况下,我需要一个网络报废解决方案。我也没有违反任何EULA。仅供参考。