我正在尝试从以下网站提取信息:http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx
如您所见,本网站列出了巴塞罗那证券交易所的公司。但它只按字母顺序列出第一页。我正在使用PHP自动从所有页面获取信息。例如,如果单击顶部所在位置ERC - HUL
的链接,则转到包含更多以字母开头的公司名称的页面:ERC。
我对APSX没有多少经验,但我在调查后看到的是,当你点击该链接时,会触发以下JS函数:
var GoPag = function (inicio) {
document.forms.aspnetForm['ctl00_Contenido_GoPag'].value = inicio;
document.forms.aspnetForm.submit();
}
这基本上只是提交带有隐藏输入字段(id="ctl00_Contenido_GoPag"
name="ctl00$Contenido$GoPag"
)的表单,其中包含我们要显示的页码的值。默认值为0,ERC - HUL
的值为3.
我正在尝试将页面对应第3页,我有以下PHP代码,我在研究了一下之后创建了这些代码:
$postdata = http_build_query(
array(
'ctl00$Contenido$GoPag' => '3'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/xhtml+xm',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx', false, $context);
echo $result;
然而,这总是返回默认页面(0)的结果,该页面列出了以字母A开头的公司。似乎很喜欢发布的数据没有被正确解释。
我是否在正确的轨道上?有谁知道我能做些什么来获取我想要的数据?
谢谢!
答案 0 :(得分:0)
我最终在PHP中使用CURL找到了一种工作方法。我根据这个答案调整了代码:Php Curl Posting to .aspx
以下是一些用于将数据发布到.aspx页面并接收正确答案的工作代码:
$p = 1; //page number to get
$postdata = http_build_query(
array(
'__EVENTTARGET' => '',
'__EVENTARGUMENT' => '',
'__VIEWSTATE' => 'your_event_state_value',
'__EVENTVALIDATION' => 'your_event_validation_value',
'ctl00$Contenido$GoPag' => $p
)
);
$url = 'http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx';
// Initialise cURL
$ch = curl_init($url);
// Set options (post request, return body from exec)
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// Do the request
$result = curl_exec($ch);
//show/check the result
echo $result;
我在上面的示例中删除了__VIEWSTATE
和__EVENTVALIDATION
变量的值,但您可以通过在浏览器中调查该页面的HTML来找到这些值。