парсю сайт.
я получаю все данные, которые мне нужны.
пытаюсь записать первые 100 записей, но не могу этого сделать.
в БД записываются только первые 4 и все.
хочу добавить, что у меня идет еще проверка на существование страницы.
если нет такой, то переходим парсить следующую.
не знаю. наверное из-за того, что долгий процесс обработки страницы, моя БД отключается автоматом.
как мне увеличить это отключение?
или что это может быть вообще такое?
я не знаю что и подумать?
Спустя 18 минут, 18 секунд (27.04.2012 - 17:26) TranceIT написал(а):
1) Скорее всего max_execution_time в настройках php
2) Может быть что угодно. Начиная от ошибки в коде и заканчивая не той фазой луны.
3) А мы, не видя код, уж тем более...
2) Может быть что угодно. Начиная от ошибки в коде и заканчивая не той фазой луны.
3) А мы, не видя код, уж тем более...
Спустя 6 минут, 24 секунды (27.04.2012 - 17:32) ilma55 написал(а):
max_execution_time = 6000
innodb_buffer_pool_size = 1400M
innodb_additional_mem_pool_size = 100M
*************
гдавное то, кто скрипт обрабатыввает все 100 записей и выводит результат, что обошел 100 ссылок.
но в БД заносятся только часть.
к примеру: из 100 ссылок у меня рабочих 20.
то есть остальные ссылки битые.
но из этих 20 в БД заносятся данные только из 13.
остальная инфа не заносится.
innodb_buffer_pool_size = 1400M
innodb_additional_mem_pool_size = 100M
*************
гдавное то, кто скрипт обрабатыввает все 100 записей и выводит результат, что обошел 100 ссылок.
но в БД заносятся только часть.
к примеру: из 100 ссылок у меня рабочих 20.
то есть остальные ссылки битые.
но из этих 20 в БД заносятся данные только из 13.
остальная инфа не заносится.
Спустя 16 минут, 39 секунд (27.04.2012 - 17:49) TranceIT написал(а):
Ну раз код вы не хотите выкладывать, то я могу вам только посочувствовать и пожелать удачного дебага.
Спустя 9 минут, 29 секунд (27.04.2012 - 17:58) ilma55 написал(а):
я чуть укоротил код.
<?php
include("hacker.php");
include('simple_html_dom.php');
$postdata = '2RlID09IDEzKSkge2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdGwwMF9jdGwwMF9jcGgxX2NwaDFfY3RybEN1c3RvbWVyTG9naW5fdG9waWNDaGVja291dEFzR3Vlc 3RPclJlZ2lzdGVyX2J0blBhc3N3b3JkJykuY2xpY2soKTtyZXR1cm4gZmFsc2U7fX0gZWxzZSB7cmV0dXJuIHRydWV9OyBkAgMPZBYCAgMPFgIfB2gWAmYPD2QWAh8CBc0BaWYoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSl7aWYgKChldmVudC53aGljaCA9&__VIEWSTATE3=PSAxMykgfHwgKG V2ZW50LmtleUNvZGUgPT0gMTMpKS';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.site.cом/login.aspx");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
$sql_query = "SELECT number FROM custom_number WHERE price > 0 AND quantity > 0 ORDER BY id LIMIT 0,100";
$res_query = mysql_query($sql_query);
if ($res_query)
{
while ($row = mysql_fetch_assoc($res_query))
{
sleep(2);
$manuf = strtolower(trim($row['number'])); // это номер производителя
$url_prod_find = 'https://www.site.com/product.aspx?partno='.$manuf;
@curl_setopt($ch, CURLOPT_URL, $url_prod_find);
@curl_setopt($ch, CURLOPT_POST, 0);
@curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = @curl_exec($ch);
if (strlen($result) > 200) // проверяю, если страница существует
{
$html = str_get_html($result);
$shet = 0;
$urls = array();
foreach ($html->find('div[class=breadcrumb] a') as $element)
{
$urls[] = $element->innertext;
$shet++;
}
$menu = trim($urls[$shet-1]);
foreach ($html->find('span[id=ctl00_ctl00_cph1_cph1_ctl00_ctrlProductInfo_productShortDescriptionLabel]') as $element)
{
$title = $element->innertext;
}
//------ тут я удалил некоторые foreach
//нахожу все URL которые отправляют JSON
$url_match = array();
preg_match_all( '~url:\s?\'(.*)\'~', $result, $url_match );
$urlProdSpec = trim($url_match[0][2]); // url для "Technical Specification"
$urlProdSpec = substr($urlProdSpec,'5'); // обрезаю 'url:
$urlProdSpec = str_replace("'", "", $urlProdSpec);
$urlProdSpec = str_replace(" ", "%20", $urlProdSpec);
$ch = curl_init($urlProdSpec);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array('Content-type: application/json'));
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt_array( $ch, $options );
$result2 = curl_exec($ch); // получаю JSON данные
$res = json_decode($result2);
$descr = '';
$count_data_ts = count($res->d->results);
if ($count_data_ts > 1)
{
for ($i_ts = 0; $i_ts<$count_data_ts; $i_ts++)
{
$j_ts = $i_ts - 1;
$header_name_new_ts = $res->d->results[$i_ts]->header_name;
@$header_name_old_ts = $res->d->results[$j_ts]->header_name;
$attr_name_ts = $res->d->results[$i_ts]->attribute_name;
$attr_val_ts = $res->d->results[$i_ts]->displayvalue;
if ($start_li == '<li>') { $attr_val_ts = '<ul>'.$attr_val_ts.'</ul>'; }
$descr .= $attr_name_ts.' : '.$attr_val_ts.'<br />';
}
}
// INSERT data in database
$sql_insrt = "INSERT INTO custom_data (id, menu, title, price, thumb_img, img, sh_descr, descr, sku) VALUES (NULL, '$menu', '$title', '$price', '$thumb_img', '$img', '$sh_descr', '$descr', '$manuf')";
$result_insrt = mysql_query($sql_insrt);
unset($menu); unset($title); unset($price); unset($thumb_img); unset($img); unset($sh_descr); unset($descr); unset($manuf); // очищаем переменные
} // end "if (result > 200)"
} // end WHILE
} // end SELECT
curl_close($ch);
echo 'Done!!!';
?>
Спустя 2 дня, 17 часов, 31 минута, 15 секунд (30.04.2012 - 11:29) ilma55 написал(а):
тема закрыта.
mysql_error подсказал ошибку.
max_allowed _timeout надо было увеличить
и вносить данные защищаясь от sql_injection
mysql_error подсказал ошибку.
max_allowed _timeout надо было увеличить
и вносить данные защищаясь от sql_injection
_____________
Программист – это не деятельность, это иной образ жизни!