не работает парсинг с помошю scrapy (python + php)

2.73K
.
(\/)____o_O____(\/)

_endrju_, тебе для винды? просто там надо еще и кодировку с utf переводить для винды
тест на сотне

Прикрепленные файлы:
.
(\/)____o_O____(\/)

вот архив с файлом готовым и быдлокод приложил
плюс в сполер для потомков

быдлокод (+/-)

<?php

$url = 'http://b2binform.ru/result?c=203&page=';
$domen = 'http://b2binform.ru';

function myCurl($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.61');
    curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 200);
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    
    $data = curl_exec($ch);
    curl_close($ch);
    
    return $data;
}

$result = array();

for ($i = 1; $i <= 42; $i++) {
    $result[$i] = myCurl($url . $i);
}

#echo '<pre>' . print_r($result[1], 1) . '</pre>'; exit;
#echo nl2br(htmlspecialchars($result[1])); exit;
$links = array();


function getLinks($res) {
    global $domen;
    
    preg_match_all('#<a href="(/c/.*.html)"><div class="search_result_item">#', $res, $matches);
    
    return array_map(function ($val) use ($domen) {return $domen . $val;}, $matches[1]); // добавляем домен к ссылкам
}

foreach ($result as $link) {
    $links = array_merge(getLinks($link), $links);
}

/*
$links = array_map('getLinks', $result);
*/

#echo '<pre>' . print_r($links, 1) . '</pre>';
#echo count($links, COUNT_RECURSIVE) - 42; // минус ключи

function getInfo($res) {
    preg_match_all('#<div class="information_top">(.*)<div class="map">#isU', $res, $matches);
    
    return $matches[1];
}

#$info = array_map('myCurl', $links);
#$info = myCurl($links[0]);
#$info = getInfo($info);

#echo '<pre>' . print_r($info[0], 1) . '</pre>';

$info = array();

foreach($links as $link) {
    $inf = getInfo(myCurl($link));
    $info[] = $inf[0];
}
#echo '<pre>' . print_r(array_unique($info), 1) . '</pre>';
$info = array_unique($info);

function getParam($res) {
    preg_match_all('#<div><span>(.*)</span>(.*)</div>#isU', $res, $matches);
    $array = array_combine($matches[1], array_map('strip_tags', $matches[2]));
    array_pop($array);
    
    return $array;
}

$ress = array();

foreach($info as $val) {
    $ress[] = getParam($val);
}
#$test = getParam($info[0]);

#echo '<pre>' . print_r($ress, 1) . '</pre>';

$file = 'result.csv';

$fields = array('id', 'Наименование', 'Адрес', 'Телефоны', 'Email', 'WWW');
$firstline = implode(';', $fields);
file_put_contents($file, iconv('UTF-8', 'windows-1251', $firstline) . PHP_EOL, FILE_APPEND | LOCK_EX);

foreach($ress as $key => $array) {
    $str = ++$key . ';';
    foreach($fields as $field) {
        if ($field != 'id') {
            if (array_key_exists($field, $array)) {
                $str .= $array[$field] . ';';
            } else {
                $str .= "\t;";
            }
        }
    }
    $str .= PHP_EOL;
    if (mb_check_encoding($str, 'UTF-8')) {
        $str = iconv('UTF-8', 'windows-1251', $str);
    }
    file_put_contents($file, $str, FILE_APPEND | LOCK_EX);
}
#echo $str;


на самом деле еще можно долго оптимизировать, генерил файл 200 кб почти 10 минут
Прикрепленные файлы:
.
# Koenig (26.09.2016 / 21:50)
_endrju_, тебе для винды? просто там надо еще и кодировку с utf переводить для винды
тест на сотне
Не у меня линупс :-)
.
(\/)____o_O____(\/)

_endrju_, ну тогда три строки удалить и одну изменить =) там где iconv

.
(\/)____o_O____(\/)

_endrju_, в архиве файл, можешь шаманить Гг

.
# Koenig (26.09.2016 / 22:10)
вот архив с файлом готовым и быдлокод приложил
плюс в сполер для потомков


<?php

$url = 'http://b2binform.ru/result?c=203&page=';
$domen = 'http://b2binform.ru';

function myCurl($url) {
Хм, у тебя крксивше файл получился, я запилил так что например адрес там видел, город например идёт ссылкой, то мне весь хтмл в одну ячейку записался, из-за не понимания, как разобрать точнее файл) завтра буду на работе скину пример)
По поводу генерации, у меня все за минуты 3-4 спарсилось)
.
(\/)____o_O____(\/)

_endrju_, ну если сесть и проштудировать, там кода раза в три больше получится, но в разы быстрее провернется, просто на самом деле надо сделать на одной странице сначала, а разницы на 100 или 100к провернуть уже нет

.
# Koenig (26.09.2016 / 22:10)
вот архив с файлом готовым и быдлокод приложил
плюс в сполер для потомков


<?php

$url = 'http://b2binform.ru/result?c=203&page=';
$domen = 'http://b2binform.ru';

function myCurl($url) {
А какая часть кода "вырезает" нужные данные? Гг таки правильно сделал я что на питон наваял ету задачу, сам бы наверно дней 5 писал етот парсер на пыхе)
.
(\/)____o_O____(\/)

_endrju_, preg_match_all по регулярке собирает у меня нужное, что в скобках в регулярке, попадает в результат, там где я выбирал имя поля и значение, там два пары скобок, потом собирал массив, (array_combine) т вырезал из значений теги, array_map + strip_tags

.

Koenig, а зачем ты куки установил? Разве они где-то в скрипте используются?

Всего: 79