Я пытаюсь извлечь информацию со следующего веб-сайта: 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. Кажется, что опубликованные данные не интерпретируются правильно.
Я на правильном пути? Кто-нибудь знает, что я могу сделать, чтобы получить данные, которые я ищу?
Благодарю!
Я закончил поиск рабочего метода с использованием CURL в PHP. Я адаптировал код из этого ответа: 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 для этой страницы в своем браузере.