Мне нужно собрать некоторые данные с более чем 8000 страниц x 25 записей на странице. Это около 200 000 записей. Проблема в том, что сервер отклоняет мои запросы через некоторое время. Хотя я слышал, что это довольно медленно, я использовал simple_html_dom в качестве библиотеки для очистки. Это пример данных:
<table>
<tr>
<td width="50%" valign="top" style="font-size:12px;border-bottom:1px dashed #a2a2a2;">Data1</td>
<td width="50%" valign="top" style="font-size:12px;border-bottom:1px dashed #a2a2a2;">Data2</td>
</tr>
<tr>
<td width="50%" valign="top" style="font-size:12px;border-bottom:1px dashed #a2a2a2;">Data3</td>
<td width="50%" valign="top" style="font-size:12px;border-bottom:1px dashed #a2a2a2;">Data4</td>
</tr>
</table>
И скрипт очистки php:
<?php
$fileName = 'output.csv';
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen('php://output', 'w');
ini_set('max_execution_time', 300000000000);
include("simple_html_dom.php");
for ($i = 1; $i <= 8846; $i++) {
scrapeThePage('url_to_scrape/?page=' . $i);
if ($i % 2 == 0)
sleep(10);
}
function scrapeThePage($page)
{
global $theData;
$html = new simple_html_dom();
$html->load_file($page);
foreach ($html->find('table tr') as $row) {
$rowData = array();
foreach ($row->find('td[style="font-size:12px;border-bottom:1px dashed #a2a2a2;"]') as $cell) {
$rowData[] = $cell->innertext;
}
$theData[] = $rowData;
}
}
foreach (array_filter($theData) as $fields) {
fputcsv($fh, $fields);
}
fclose($fh);
exit();
?>
Как видите, я добавил 10-секундный интервал ожидания в цикле for, чтобы не нагружать сервер запросами. Когда он предлагает мне загрузить CSV, у меня внутри есть эти строки:
Предупреждение: file_get_contents(url_to_scrape/?page=8846): не удалось открыть поток: HTTP-запрос не выполнен! HTTP/1.0 500 Internal Server Error Неустранимая ошибка: вызов функции-члена find() для необъекта в D:\www\htdocs\ucmr\simple_html_dom.php на линии 1113
Страница 8846 существует, и это последняя страница скрипта. Номер страницы варьируется в приведенной выше ошибке, поэтому иногда я получаю сообщение об ошибке, например, на странице 800. Может кто-нибудь, пожалуйста, дайте мне представление о том, что я делаю неправильно в этой ситуации. Любые советы будут полезны.