Частый посетитель
Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011
Помог: 0 раз(а)
|
Ситуация такая, написал парсер, работает, нужно спарсит ним более миллиона статей, скрипт работает через curl, но медленно, примерно 1 сек/одная спарсеная статья.
Есть идеи как ускорить этот curl?
Скрипт парсера:
PHP:
скопировать код в буфер обмена
<?PHP function get_row_count($table, $suffix = "") { global $mysqli; if ($suffix) $suffix = " $suffix"; ($r = $mysqli->query("SELECT COUNT(*) FROM $table$suffix")); ($a = $r->fetch_row()); return $a[0]; } function sqlesc($value) { global $mysqli; $value = "'" . $mysqli->real_escape_string($value) . "'"; } return $value; } function sqlerr($file = "", $line = "", $error = "") { global $USER; die("<b>MySQL Error:</b><br /><b>File:</b> ". $file ." <b>Line:</b> ". $line ."<br /><b>Error:</b> ". $error); } "host" => "localhost", "user" => "root", "password" => "123456", "database" => "site", "charset" => "utf8" ); $mysqli = @ new mysqli($mysql['host'], $mysql['user'], $mysql['password'], $mysql['database']); @ $mysqli->query("SET NAMES " . $mysql['charset']); } function curl($url = ""){ curl_setopt($cl, CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"); return $ex; } $result = $mysqli->query("SELECT * FROM links WHERE used = 'no'") or sqlerr(__FILE__, __LINE__, $mysqli->error); $row = $result->fetch_array(); $site = curl("...url..." . $row['link']); $name =iconv("WINDOWS-1251","UTF-8", $name); preg_match("#</noindex>\s+</td></tr></table>(.*?)</center><hr>#si", $site, $tmp); $result = preg_replace('#<noindex.*?</noindex>|<script.*?</script>|<ins.*?</ins>|<!--.*?-->#si', '', $tmp[1 ]); $text = iconv("WINDOWS-1251","UTF-8", $text); foreach($urls[1] as $val) { $urls_end .= $val . "\n"; } $result = $mysqli->query("INSERT INTO texts (name, text, image_urls, categoryid, link) VALUES (" . implode(", ", array_map("sqlesc", array($name, trim($text), trim($urls_end), $row['categoryid'], $row['link']))) . ")") or sqlerr (__FILE__, __LINE__, $mysqli->error); $mysqli->query("UPDATE links SET used = 'yes' WHERE id = " . $row['id']) or sqlerr(__FILE__, __LINE__, $mysqli->error); $a = get_row_count("links"); $b = get_row_count("texts"); $number1 = $a; $number2 = $b; $result = ($number2 / $number1) * 100; echo "Обработано: " . $b . " / " . $a . " (" . round($result) . "%)."; ?> <meta http-equiv="refresh" content="0;URL=2.php" />
(Отредактировано автором: 23 Января, 2015 - 03:26:48)
|