Javascript 在动态站点中抓取数据

Javascript 在动态站点中抓取数据,javascript,php,web-scraping,Javascript,Php,Web Scraping,我正试图从我们当地政府那里搜集数据。我要的是儿童收养办公室的地址。在巴西,所有收养都要经过政府。所以我有一个办公室的URL,还有2到3千个。但是如果我能设法得到一个,其他的就容易了。 我做了很多尝试,下面我展示了三个 问题可能与刷新页面的Javascript(可能是Ajax)有关 注意:我不是PHP开发人员 第一次尝试 echo '<html><head></head><body>'; echo '<h1>Scraper PHP GE

我正试图从我们当地政府那里搜集数据。我要的是儿童收养办公室的地址。在巴西,所有收养都要经过政府。所以我有一个办公室的URL,还有2到3千个。但是如果我能设法得到一个,其他的就容易了。 我做了很多尝试,下面我展示了三个

问题可能与刷新页面的Javascript(可能是Ajax)有关

注意:我不是PHP开发人员

第一次尝试

echo '<html><head></head><body>'; 
echo '<h1>Scraper PHP GET 1</h1>'; 

echo ini_get("allow_url_fopen");
echo ini_get("allow_url_fopen");

// I used this url for test
//$url = 'http://www.portaldaadocao.com.br'; 

//This is the URL that I really want
$url = 'http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';

$html = file_get_contents($url); 
var_dump($html); 

echo '</body></html>'; 

// Output
// 11
// Warning: 
file_get_contents(http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?
transacao=CONSULTA&vara=2673) [function.file-get-contents]: failed to open stream: HTTP 
request failed! HTTP/1.1 404 Not Found in /home/rsl/www/sc01_get.php on line 14
// bool(false)
echo';
echo“获取1”;
echo ini_get(“允许url_fopen”);
echo ini_get(“允许url_fopen”);
//我使用这个url进行测试
//$url='1http://www.portaldaadocao.com.br'; 
//这是我真正想要的URL
$url='1http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';
$html=文件内容($url);
变量转储($html);
回声';
//输出
// 11
//警告:
文件\u获取\u内容(http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?
transacao=CONSULTA&vara=2673)[function.file get contents]:无法打开流:HTTP
请求失败!在第14行的/home/rsl/www/sc01_get.php中找不到HTTP/1.1 404
//布尔(假)
第二次尝试

echo '<html><head></head><body>'; 
echo '<h1>Scraper PHP CURL 3</h1>'; 

// I used this url for test
//$url = 'http://www.portaldaadocao.com.br'; 

//This is the URL that I really want
$url = 'http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';

$curl = curl_init($url);
@curl_setopt($curl, CURLOPT_POSTFIELDS, "foo");
@curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
@curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");;

$html=@curl_exec($curl);

if (!$html) {
    echo "<br />cURL error number:" .curl_errno($curl);
    echo "<br />cURL error:" . curl_error($curl);
    exit;
}
else{
   echo '<br>begin HTML[';
    echo  $html;
   echo '<br>]end html '; 
}
echo '</body></html>'; 

// Output
// 1
echo';
回声‘3’;
//我使用这个url进行测试
//$url='1http://www.portaldaadocao.com.br'; 
//这是我真正想要的URL
$url='1http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';
$curl=curl\u init($url);
@curl_setopt($curl,CURLOPT_POSTFIELDS,“foo”);
@curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
@curl_setopt($curl,CURLOPT_CUSTOMREQUEST,“POST”);;
$html=@curl\u exec($curl);
如果(!$html){
echo“
卷曲错误号:”.cURL\u errno($cURL); echo“
旋度错误:“.cURL\u错误($cURL); 出口 } 否则{ 回显“
开始HTML[”; echo$html; 回显“
]结束html”; } 回声'; //输出 // 1
第三次尝试

function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.windowsphone.com");

    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

echo '<html><head></head><body>'; 
echo '<h1>Scraper PHP CURL 5</h1>'; 

// I used this url for test
//$url = 'http://www.portaldaadocao.com.br'; 

//This is the URL that I really want
$url = 'http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';

$curl = curl_init($url);
@curl_setopt($curl, CURLOPT_POSTFIELDS, "foo");
@curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
@curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");;

$html=@curl($curl);


if (!$html) {
    echo "<br />cURL error number:" .curl_errno($curl);
    echo "<br />cURL error:" . curl_error($curl);
    exit;
}
else{
    echo '<br>begin HTML[';
    echo  $html;
    echo '<br>]end html '; 
}
echo '</body></html>'; 

// Output
// cURL error number:0
// cURL error:
函数curl($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(windowsnt 5.1)AppleWebKit/535.6(KHTML,像Gecko)Chrome/16.0.897.0 Safari/535.6');
curl_setopt($ch,CURLOPT_头,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,“cookie.txt”);
curl_setopt($ch,CURLOPT_COOKIEJAR,“cookie.txt”);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
curl_setopt($ch,CURLOPT_REFERER,”http://www.windowsphone.com");
$data=curl\u exec($ch);
卷曲关闭($ch);
返回$data;
}
回声';
回声‘5’;
//我使用这个url进行测试
//$url='1http://www.portaldaadocao.com.br'; 
//这是我真正想要的URL
$url='1http://www.cnj.jus.br/cna/Controle/ConsultaPublicaBuscaControle.php?transacao=CONSULTA&vara=2673';
$curl=curl\u init($url);
@curl_setopt($curl,CURLOPT_POSTFIELDS,“foo”);
@curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
@curl_setopt($curl,CURLOPT_CUSTOMREQUEST,“POST”);;
$html=@curl($curl);
如果(!$html){
echo“
卷曲错误号:”.cURL\u errno($cURL); echo“
旋度错误:“.cURL\u错误($cURL); 出口 } 否则{ 回显“
开始HTML[”; echo$html; 回显“
]结束html”; } 回声'; //输出 //卷曲错误号:0 //卷曲误差:
如果页面确实是基于ajax的,这意味着需要通过javascript执行加载或显示的信息,则需要另一种方法。您需要使用真正的浏览器实现自动化。你可以选择用多种语言编写或使用Javascript作为编程语言的方法。我现在正在学习Selenium。有趣。到目前为止,我能够恢复一页。Selenium对java刷新没有问题。伟大的现在我需要了解如何保存页面。谢谢