-1

我正在为交易建立一个搜索引擎,并将所有交易放在地图上,所以我需要来自网站的坐标和抓取。

因此,坐标可以在脚本、标签、图像、链接等上。

是否有任何工具或任何脚本、框架可以帮助我快速从某些网站获取坐标?怎么做?使用 PHP、XPath、正则表达式、节点、css 选择器???一些快速的“获取坐标”脚本。

有什么解决方案吗,手动操作太难了,因为我需要在超过 10,000 个网站上进行抓取,并且所有网站上的坐标都在脚本标签、图像或链接中......

任何自动化解决方案?

以下是一些案例:

 <a href="http://maps.google.com/maps?q=44.796637,20.480168" target="_blank">prikaži na karti</a>

<iframe frameborder="0" border="0" scrolling="no"  marginwidth="0" marginheight="0" title=""  src="http://www.kolektiva.rs/beograd/dailydeal/vendor/map/center/44.815123,20.469887/"></iframe>

<iframe frameborder="0" height="230" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=el&amp;msa=0&amp;msid=207271638222613154872.00049df7bb569d7af0057&amp;ll=38.775499,23.483276&amp;spn=0.984971,1.257935&amp;z=8&amp;output=embed" width="230"></iframe>

您可以添加您的案例,因为每个站点上都有不同类型的地图...

那么是否有通用代码不仅可以从这个示例中提取坐标 - 对于每个文本?

4

3 回答 3

1

嗯,我认为你有一个减号,因为你似乎在寻找某种魔法......或者你可能不够清晰和准确......

也许您应该尝试将您的问题分成几个孤立的确定问题,因为一种通用地理坐标网络收割机似乎是一个非常具体的应用程序......也许它存在,我不知道,但是......听起来不错现在的魔法:-)

所以也许试着对你可能面临的每个案例做一个清晰、明确的清单,并可能开始尝试为每个案例考虑一个可能的提取解决方案......

话虽如此,首先,您确定 IP 到 GPS 坐标还不够吗?如果您的每笔交易都有一个 URL,那么它可能就足够了。在这种情况下,您可能想看看这里,免费数据库每个月都会更新,但它应该足够准确。他们为许多开发环境提供 API,您可以在此地址免费试用他们的服务(每天最多 25 个请求)

这是在 PHP 上使用geolitecity数据库和quova的快速教程

我认为 PHP 也有一个 GeoIP 模块,但我不知道它是使用 maxmind 服务还是其他服务,而且我无法访问 PHP 网站,它现在似乎已关闭。也许以后试试这个,

编辑:您需要说明您的交易将拥有什么样的来源。它是在 ebay 或 amazon 等大型企业网站上,还是类似的?如果是,您可能首先要检查他们是否有适当的 API,您可以从中轻松检索每笔交易的 GPS 坐标...

编辑#2: 好的,所以从你的样本来看,你所有的地理定位案例似乎都是表格23.987463,12.098374,比如说1 到 3 位数字之间是否有“减号”,后跟一个点,然后是 6 位数字,然后是逗号,然后一到三位数字之间是否有“减号”,后跟一个点和六位数字......因此,匹配此格式的正则表达式将是:

'-?[0-9]{1,3}.[0-9]{6},-?[0-9]{1,3}.[0-9]{6}'

现在,在 PHP 中,您应该执行以下操作:

preg_match_all('-?[0-9]{1,3}.[0-9]{6},-?[0-9]{1,3}.[0-9]{6}',$s,$out);

您的输入字符串在$s哪里,以及您在哪里获得一个包含 3 个 GPS 坐标的数组$out

$out 中的数组看起来像:

Array
(
[0] => Array
(
[0] => 44.796637,20.480168
[1] => 44.815123,20.469887
[2] => 38.775499,23.483276
)

现在,我不是一个 PHP 人,我无法在我的机器上尝试任何代码,所以我建议你尝试一下,如果需要,就你可能遇到的新问题提出新的问题,更加清晰和明确......

于 2012-06-09T11:37:19.037 回答
0

(preg_match_all('#(([0-9-]+){1,3}.([0-9]+))#is', $string, $matches))

工作!!!!

http://ideone.com/X5qNh

于 2012-06-09T17:14:23.327 回答
0

没有规定坐标有 6 位小数精度。我通常看到 4 到 10 之间,但实际上它可以是任何数字。最大值是 180,所以也许'-?1?\d{1,2}\.\d{4,10}'

于 2012-06-10T00:53:16.567 回答