1 Востаннє редагувалося mmm (28.08.2013 11:39:23)

Тема: Парсинг bitsnoop*com

Всім привіт.
Мені потрібно парсити торрент bitsnoop*com, але він не дається. Приходить порожній результат.
Тобто
curl_multi_info_read повертає Array ( [msg] => 1 [result] => 7 [handle] => Resource id #14 )
а
curl_multi_getcontent порожній.
Парсер на PHP.
Параметри:

protected $curl_options = array(
        CURLOPT_COOKIEJAR => '/home/m/www/tormag.git/parser/cookie.txt',
        CURLOPT_COOKIEFILE => '/home/m/www/tormag.git/parser/cookie.txt',
                
        CURLOPT_PORT            => 80,
        CURLOPT_RETURNTRANSFER    => 1, // возвращать значение как результат функции, а не выводить в stdout

        CURLOPT_BINARYTRANSFER    => 1, // передавать в binary-safe
        CURLOPT_CONNECTTIMEOUT    => 10, // таймаут соединения ( lookup + connect )

        CURLOPT_TIMEOUT            => 30, // таймаут на получение данных
        CURLOPT_USERAGENT        => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1',

        CURLOPT_VERBOSE            => 2, // уровень информирования
        CURLOPT_HEADER            => 0, // заголовок не получается
        CURLOPT_FOLLOWLOCATION    => 1, // следовать редиректам

        CURLOPT_MAXREDIRS        => 10, // максимальное число редиректов
        CURLOPT_AUTOREFERER        => 1, // при редиректе подставлять в «Referer:» значение из «Location:»

        // CURLOPT_FRESH_CONNECT    => 0, // каждый раз использовать новое соединение
        CURLOPT_HTTPHEADER        => array(
                        'Expect:',
                        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9',

                        'Accept-Language: en-us;q=0.7,en;q=0.7',
                        //'Accept-Encoding: gzip,deflate', // нужно потом распаковывать. ну его пока…
                        'Accept-Charset: utf-8,windows-1251;q=0.7,*;q=0.5',
                    )
        );

Функція:

protected function loadPages($urls, $callback=false, $close=false){
        if(empty($this->mh))$this->mh = curl_multi_init();
        if ( $this->mh === false ) return false;
        $urls = (array)$urls;
        $chs = array();
        foreach ( $urls as $url ) {
            $chs[] = ( $ch = curl_init() );

            curl_setopt_array( $ch, $this->curl_options );
            curl_setopt( $ch, CURLOPT_URL, $url );

            curl_multi_add_handle( $this->mh, $ch );
        }
        $prev_running = $running = null;

        do {
            curl_multi_exec( $this->mh, $running );
            if ( $running != $prev_running ) {
                // получаю информацию о текущих соединениях
                $info = curl_multi_info_read( $this->mh );
                if ( is_array( $info ) && ( $ch = $info['handle'] ) ) {
                    // получаю содержимое загруженной страницы
                    $content = curl_multi_getcontent( $ch );
                    // скаченная ссылка
                    $url = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL );
                    print_r($info);
                    if($callback)$this->$callback($url, $content, $info['result'], $ch);
                    else $this->parseAndSave($url, $content, $info['result'], $ch);
                }
                // обновляю кешируемое число текущих активных соединений
                $prev_running = $running;
            }
        } while ( $running > 0 );
        
        foreach ( $chs as $ch ) {
            curl_multi_remove_handle( $this->mh, $ch );
            curl_close( $ch );
        }
        if($close){
            curl_multi_close( $this->mh );
        }
    }

параметри CURLOPT_COOKIEJAR, CURLOPT_COOKIEFILE задані, але файл cookie.txt не створюється. права є. ОС Ubuntu.
file_get_contents повертає "It works" (привітальну сторінку апача)

функція робоча - з іншими сайтами працює.

2

Re: Парсинг bitsnoop*com

спробуйте в один потік парсити

3

Re: Парсинг bitsnoop*com

Тобто вам треба розпарсити видачу торрент-пошуковика? Усі пошуковики із цим борються, бо вони шекель на рекламі заробляють, тож це не новина.