我正在为交易建立一个搜索引擎,我把所有交易都放在地图上,所以我需要来自网站的坐标。
因此,坐标可以在 scrit、标签、图像、链接等上。
是否有任何工具或任何脚本,框架可以帮助我快速从某些网站获取坐标?怎么做?使用PHP,XPath,regex,node,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&hl=el&msa=0&msid=207271638222613154872.00049df7bb569d7af0057&ll=38.775499,23.483276&spn=0.984971,1.257935&z=8&output=embed" width="230"></iframe>
您可以添加您的案例,因为每个站点上都是不同类型的地图......
那么,是否有通用代码不仅可以从此示例中提取坐标 - 对于每个文本???
我想你得到了一个减号,因为你似乎在寻找某种魔法......或者你不够清晰和准确,也许...
也许您应该尝试将您的问题分成几个孤立的确定问题,因为一种通用地理位置坐标网络收割机似乎是一个非常具体的应用程序......也许它存在,我不知道,但是...现在听起来有点神奇:-)
因此,也许可以尝试对您可能面临的每个案例进行清晰,明确的清单,并可能开始尝试考虑每种情况的可能提取解决方案......
话虽如此,首先,您确定IP到GPS坐标是不够的吗?如果您的每笔交易都有一个 URL,那么这可能就足够了。在这种情况下,您可能想看看这里,免费数据库每月更新一次,但它应该足够准确。他们为许多开发环境提供API,您可以在此地址自由尝试他们的服务(每天最多25个请求)
这是一个在PHP上使用geolitecity数据库和quova的快速教程
我认为PHP也有一个GeoIP模块,但我不知道它是使用maxmind服务还是另一个,而且我无法访问PHP网站,现在似乎已经关闭了。也许以后再试试,
编辑:您需要说出您的交易将拥有什么样的来源。它是在ebay或亚马逊等大型企业网站上,还是类似的?如果是,您可能首先要检查他们是否有适当的 API,您可以从中轻松检索每笔交易的 GPS 坐标......
编辑#2:好的,所以从您的样本来看,似乎您所有的地理位置情况都带有 23.987463,12.098374
的形式,比如
'-?[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的人,我不能在我的机器上尝试任何代码,所以我建议你做一些尝试,如果需要,提出新的问题,更清晰和明确,关于你可能遇到的新问题......
(preg_match_all('#(([0-9-]+){1,3}.([0-9]+))#is', $string, $matches))
工作!!!!
http://ideone.com/X5qNh
没有规则规定坐标具有 6 位小数的精度。我通常看到 4 到 10 之间,但实际上它可以是任何数字。最大值是180,所以也许'-?1?'d{1,2}'.'d{4,10}'