1

Тема: Парсер

Добрий день! Допоможіть мені розібратіся з парсером. Коли я намагаюсь парсити Росію http://qlaster.ru/enterprises/16-470-pticefabriki у мене парсится регіон Екатеренбург. В чому моя помилка?

function arr($url, $start, $end){
        if ($start < $end) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            //curl_setopt($ch, CURLOPT_HEADER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0');
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $html = curl_exec($ch);
            curl_close($ch);
            $file = phpQuery::newDocument($html);

            $file = pq($file);

            foreach ($file->find('.kotel_block .ones_block') as $inside) {
                $inside = pq($inside);

                $doc = $inside->find('.ones_h1 a')->attr('href');
                $ini = "https://msk.qlaster.ru";
                $res = $ini."$doc";
                $res."<br>";

                $ss = curl_init($res);

                curl_setopt($ss, CURLOPT_RETURNTRANSFER, true);
                //curl_setopt($ch, CURLOPT_HEADER, true);
                curl_setopt($ss, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ss, CURLOPT_SSL_VERIFYHOST, false);
                curl_setopt($ss, CURLOPT_SSL_VERIFYPEER, false);
                $htm = curl_exec($ss);
                curl_close($ss);
                $fil = phpQuery::newDocument($htm);

                $fil = pq($fil);

                $title = trim($fil->find('.portal_h1 span')->text());
                echo $title;

                $title = trim($fil->find('.portal_h1 span')->text());
                $sfera = trim($fil->find('.portal p')->text());
                $email = trim($fil->find('.sait_line:eq(3) a')->text());
                $time = trim($fil->find('.sait_line:eq(7) p')->text());
                $site = trim($fil->find('.sait_line:nth-child(2) a')->text());
                $phone = trim($fil->find('.sait_line:nth-child(1) p')->text());
                $yourlica = trim($fil->find('.sait_line:eq(4) p')->text());
                $user = trim($fil->find('.sait_line:eq(6) p')->text());
                $strit = trim($fil->find('.sait_right .street-address')->text());

                //AddParse ($site, $phone, $yourlica, $user ,$strit, $title, $sfera, $email, $time);

                xprint($title);
                xprint($sfera);
                xprint($email);
                xprint($time);
                xprint($site);
                xprint($phone);
                xprint($yourlica);
                xprint($user);
                xprint($strit);
                echo '<hr>';

                phpQuery::unloadDocuments($htm);
            }
            phpQuery::unloadDocuments($html);
            $pagin = $file->find('.pagination ul li:last-child a')->attr('href');
            $next = $ini."$pagin";

            if (!empty($next)) {
                $start++;
                arr($next, $start, $end);
            }
        }

    }

    $url = "http://qlaster.ru/enterprises/16-470-pticefabriki";
    $start = 0;
    $end = 1;
    arr($url, $start, $end);
Подякували: 221VOLT1

2

Re: Парсер

Прихований текст

Ваша помилка в тому, що ви працюєте на кацапів.

3

Re: Парсер

Я працюю на Українських підприємців Ми продаемо Росіянам їхню інформацію.

Подякували: 221VOLT, Monolith, iovchynnikov, /KIT\, ostap34PHP5

4

Re: Парсер

Гадаю, що ви просто не спарсите це за допомогою CURL`а. Вам потрібнй Headless бравзер штибу Casper JS (приклад подібної роботи). Просто ходити по сторінках на цьому сайті за допомогою CURL`а ви не зможете, бо JavaScript.

Подякували: koala, 221VOLT, ostap34PHP, leofun014

5

Re: Парсер

Я помітив якщо дати запит в браузері

Заголовки запроса (1,400 КБ)    
Accept    
text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding    
gzip, deflate
Accept-Language    
ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Cache-Control    
no-cache
Connection    
keep-alive
Cookie    
PHPSESSID=707e0ad2026302b3fa09…02b3fa0963c4ca1aa935%22%3B%7D
Host    
qlaster.ru
Pragma    
no-cache
Referer    
http://qlaster.ru/
Upgrade-Insecure-Requests    
1
User-Agent    
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0

Відповідь приходить те що треба.
Допоможіть це зробити в коді.

Подякували: 221VOLT, 0xDADA11C72

6

Re: Парсер

знаю як це зробити в erlang в декілька строк,
в php уже розучився((

Подякували: Monolith1

7

Re: Парсер

Ви все правильно робите, але спочатку покажіть нам весь ваш запит в початковій хвормі, а не оце - недороблений недопарсений недошматок. Де POST/GET запит?

8

Re: Парсер

Новий запит:
GET  http://qlaster.ru/enterprises/16-470-pticefabriki

Заголовки запиту:

Host: qlaster.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://qlaster.ru/
Cookie: PHPSESSID=707e0ad2026302b3fa0963c4ca1aa935; sky_region=7a5aabde6c0bd87f1c9d4ab88878574d809b37a2034b7d9ca60b5309f959c784a%3A2%3A%7Bi%3A0%3Bs%3A10%3A%22sky_region%22%3Bi%3A1%3Bi%3A-1%3B%7D; _ga=GA1.2.797373966.1512989066; _gid=GA1.2.2001986091.1512989068; _ym_uid=1512989069285599295; sky_city=4839b2c6fd9bf00de5d33484c5aea358c7c2783173f7fee613c421d279d9e5f8a%3A2%3A%7Bi%3A0%3Bs%3A8%3A%22sky_city%22%3Bi%3A1%3BN%3B%7D; _ym_isad=2; _csrf=7397644f7c9f041d0327818935bd53d803bbdb8cb2a26b0d24bb5399eb1445a6a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22%D9%10%F9d%28%17%15%CF%81nLM%40%19%B7%89%0D%E3%05%88%3A%08Y%90%D9%22X%01%BCM%A8%7F%22%3B%7D; uniq_log=f420c75f6662009f7e93c815c1982dccaaf718d5f7c85c77e0a0ce96eaa93f52a%3A2%3A%7Bi%3A0%3Bs%3A8%3A%22uniq_log%22%3Bi%3A1%3Bi%3A1%3B%7D; PHPSESSIDLONG=dffaffa9e81a59dd8951b7918dd245d0328eeed113704163eac4955b6b1c1ac4a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22PHPSESSIDLONG%22%3Bi%3A1%3Bs%3A32%3A%22707e0ad2026302b3fa0963c4ca1aa935%22%3B%7D
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Подякували: 0xDADA11C7, 221VOLT2

9

Re: Парсер

Спочатку навчіться приймати печиво, аби потім його віддавати. Час життя вашої бравзерної сесії невеликий, тому ймовірно, що невдовзі цей запит не працюватиме.

Помедитуйте над наступним шматком коду:

function wget($url, $follow = true) {

    $host = parse_url($url);

    $agent       = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1';
    $curlHeaders = array(
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Encoding: gzip, deflate',
        'Accept-Language: en-US,en;q=0.5',
        'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0.1',
        'Connection: Keep-Alive',
        'Pragma: no-cache',
        'Referer: http://example.com/',
        'Host: ' . $host['host'] . (isset($host['port']) ? ':' . $host['port'] : null), // building host header
        'Cache-Control: no-cache',
        'Cookie: visid_incap_185989=9v1q8Ar0ToSOja48BRmb8nn1GFUAAAAAQUIPAAAAAABCRWagbDIfmlN9NTrcvrct; incap_ses_108_185989=Z1orY6Bd0z3nGYE2lbJ/AXn1GFUAAAAAmb41m+jMLFCJB1rTIF28Mg==; _ga=GA1.3.637468927.1427699070; _gat=1; frontend=rqg7g9hp2ht788l309m7gk8qi7; _gat_UA-1279175-12=1; __utma=233911437.637468927.1427699070.1427699078.1427699078.1; __utmb=233911437.2.10.1427699078; __utmc=233911437; __utmz=233911437.1427699078.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt_UA-1279175-1=1; _cb_ls=1; _chartbeat2=S0WVXDwMWnCFBgQp.1427699081322.1427699232786.1; PRUM_EPISODES=s=1427699568560&r=http%3A//example.com/'
    );
    $ch          = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); // following redirects or not
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_URL, $url);
    $result      = curl_exec($ch);
    return $result;
}
Подякували: slawon143, 221VOLT, leofun013

10

Re: Парсер

Дякую!!!!! Все працює!!! Я з PHP лише 1 місяц працюю. Багато чого не знаю. Український форум the BEST!!!

Подякували: 0xDADA11C7, varkon, Monolith, NaharD, Q-bart, 221VOLT6

11

Re: Парсер

0xDADA11C7 написав:

печиво

Реп'яшки ж :)

Подякували: 221VOLT1

12

Re: Парсер

iovchynnikov написав:
0xDADA11C7 написав:

печиво

Реп'яшки ж :)

Хоч кізяками назвіть — через п'ять років усе одно забудуть і придумуватимуть нову назву.

Подякували: 221VOLT, leofun012

13

Re: Парсер

P.Y. написав:
iovchynnikov написав:
0xDADA11C7 написав:

печиво

Реп'яшки ж :)

Хоч кізяками назвіть — через п'ять років усе одно забудуть і придумуватимуть нову назву.

навпаки, ніхто не придумуватиме. Бо нема потрібе є кука і буде кука

Подякували: 221VOLT, leofun012

14

Re: Парсер

Q-bart написав:
P.Y. написав:
iovchynnikov написав:

Реп'яшки ж :)

Хоч кізяками назвіть — через п'ять років усе одно забудуть і придумуватимуть нову назву.

навпаки, ніхто не придумуватиме. Бо нема потрібе є кука і буде кука

Так ні ж, cookies — одне з найперейменовуваніших понять: як не назви — через кілька років знаходиться група ентузіастів, яких ця назва не влаштовує, тому впроваджують нову, на яку чекає така ж доля. Відколи в мене з'явився інтернет, спостерігаю за цим явищем (тобто, вже майже півтора десятиліття).

Подякували: 221VOLT1