我正在尝试抓取网站以获取美国各县的纬度和经度(有3306个原因,为什么我试图通过代码而不是手动进行操作)
我正在使用下面的代码
function GetLatitude($countyName,$stateShortName){
//Create DOM from url
$page = file_get_contents("https://www.mapdevelopers.com/geocode_tool.php?$countyName,$stateShortName");
$doc = new DOMDocument();
$doc->loadHTML($page);
$node = $doc->getElementById("display_lat");
var_dump($doc);
}
GetLatitude("Guilford County","NC");
这什么都不返回,但是如果我更改url以不使用“ https://www.mapdevelopers.com/geocode_tool.php”之类的参数,那么我可以看到$doc
现在有一些信息,但这没有用,因为值I需求(纬度)取决于传递给网址的参数。
我该如何解决这个问题?
编辑:
基于对参数进行编码的建议,我将代码更改为此,现在文档包含信息,但看起来好像是在忽略参数
<?
function GetLatitude($countyName,$stateShortName){
$countyName = urlencode($countyName);
$stateShortName = urlencode($stateShortName);
//Create DOM from url
$page = file_get_contents("https://www.mapdevelopers.com/geocode_tool.php?address=$countyName,$stateShortName");
$doc = new DOMDocument();
$doc->loadHTML($page);
$node = $doc->getElementById("display_lat");
var_dump($doc);
}
GetLatitude("Clarke County","AL");
?>
答案 0 :(得分:1)
您的问题是页面加载时不存在纬度信息等,而Java脚本将其放置在页面中
您将很难尝试使用JS运行网页并将其从PHP中抓取而中间没有任何东西,也许可以使用puppet或phantomjs之类的东西重试此项目,以便可以针对真正的浏览器。
答案 1 :(得分:0)
搜索页面时,有https://www.mapdevelopers.com/data.php
的ajax请求
发送POST或GET请求将为您提供所需的响应