Парер на PHP

Samail
На сайте с 10.05.2007
Offline
369
765

Есть парсер:


$url = 'http://site.ru?id=1';
$start = '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="chanel-prog">';
$finish = '</table>';
function parser($url,$start,$finish) {
$content = file_get_contents($url);
$position = strpos($content, $start);
$content = substr($content, $position);
$position = strpos($content, $finish);
$content = substr($content, 0, $position);
$content = strip_tags($content);
$conn = mysql_connect("localhost", "**", "***") or die(mysql_error());
mysql_select_db('db');
mysql_errno ($conn);
mysql_error ($conn);
$result = mysql_query ("INSERT INTO tabl VALUES ('$content')");
mysql_close ($conn);
return $content;
}
parser($url, $start, $finish);

Как сделать что-бы он парсил не 1 страницу, а страницы с site.ru?id=1 по site.ru?id=10 (на деле страниц будет несколько тысяч). И записывал соответственно в базу несколько раз результат.

c12o16h1
На сайте с 01.09.2009
Offline
77
#1

Извините, но тот код, который вы привели - мертворожденный изначально, это печально. Посоветую тому человеку, который это писал почитать про регулярные выражения и про циклы php. А вообще, этот код - это лютый п-ц.

Моментальный вывод Webmoney в Украине (http://obmennik.ws/?r=id.4780)
Samail
На сайте с 10.05.2007
Offline
369
#2

Ну с одной страницей он работает нормально, только нужно заставить его по нескольким страницам самому пройтись. Как вариант, число в ссылке можно брать из GET параметра и другим скриптом по очереди позапускать этот скрипт с разными параметрами.

c12o16h1
На сайте с 01.09.2009
Offline
77
#3

Без обид, но лучше fl.ru. Выйдет дешевле и быстрее.

---------- Добавлено 08.08.2015 в 17:28 ----------

Раз вы так любите извращения:

function parser($url,$start,$finish) {
$content = file_get_contents($url);
$position = strpos($content, $start);
$content = substr($content, $position);
$position = strpos($content, $finish);
$content = substr($content, 0, $position);
$content = strip_tags($content);
$conn = mysql_connect("localhost", "**", "***") or die(mysql_error());
mysql_select_db('db');
mysql_errno ($conn);
mysql_error ($conn);
$result = mysql_query ("INSERT INTO tabl VALUES ('$content')");
mysql_close ($conn);
return $content;
}
$url = 'http://site.ru?id=';
$start = '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="chanel-prog">';
$finish = '</table>';
$pagination = range(0,99);
foreach ( $pagination as $page ){
$pageUrl = $url . $page;
parser($pageUrl, $start, $finish);
}
Mad_Man
На сайте с 10.11.2008
Offline
162
#4

Многопоточный. PHP 5.4+, short_open_tag = On, CURL, MySQL\MariaDB.

<?


namespace rude;

define('RUDE_DATABASE_USER', 'root'); # database user
define('RUDE_DATABASE_PASS', '1234'); # database user password
define('RUDE_DATABASE_HOST', 'localhost'); # database host address (you can also use direct ip declaration)
define('RUDE_DATABASE_NAME', 'database'); # database name
define('RUDE_DATABASE_PORT', '3306'); # database port

define('RUDE_CURL_MAX_THREADS', 30);

define('RUDE_PARSER_TOTAL_PAGES', 2000);

define('RUDE_PARSER_CONTENT_READ_FROM', '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="chanel-prog">');
define('RUDE_PARSER_CONTENT_READ_TO', '</table>');


require_once 'src/rude-php/include.php';


$page = 1; # current page

while ($page <= RUDE_PARSER_TOTAL_PAGES)
{
$curl = new curl();

for ($thread = 0; $page <= RUDE_PARSER_TOTAL_PAGES, $thread < RUDE_CURL_MAX_THREADS; $page++, $thread++)
{
$curl->add_url('http://site.ru?id=' . $page);
}

$curl_answers = $curl->query();


foreach ($curl_answers as $curl_answer)
{
if ($curl_answer->info->http_code != 200)
{
continue;
}

$content = string::read_between($curl_answer->content, RUDE_PARSER_CONTENT_READ_FROM, RUDE_PARSER_CONTENT_READ_TO);

$q = new query_insert('table');
$q->add('field', $content);
$q->query();
}
}

Зависимости в архиве, лицензия Apache.

zip rude-parser.zip

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий