通过file_get_contents发送url参数返回nothig

时间:2019-02-07 17:38:46

标签: php

我正在尝试抓取网站以获取美国各县的纬度和经度(有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");
?>

2 个答案:

答案 0 :(得分:1)

您的问题是页面加载时不存在纬度信息等,而Java脚本将其放置在页面中

您将很难尝试使用JS运行网页并将其从PHP中抓取而中间没有任何东西,也许可以使用puppet或phantomjs之类的东西重试此项目,以便可以针对真正的浏览器。

答案 1 :(得分:0)

搜索页面时,有https://www.mapdevelopers.com/data.php的ajax请求 发送POST或GET请求将为您提供所需的响应

相关问题