1

Тема: Парсер телефонів OLX

Привіт всім. Потрібно парсити з сторінки телефон на олх, але так як він захищений то не знаю як це зробити, можливо хтось вже з цим розбирався і підкаже як це все повинно відбуватися

2

Re: Парсер телефонів OLX

Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: ostap34PHP, 221VOLT2

3

Re: Парсер телефонів OLX

0xDADA11C7 написав:

Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.

про номер телефону продавця. На кожній сторінці оголошення є номер телефону захищений від парсингу, потрібно клацнути на "Показати номер" щоб його побачити, потім відправляється запит на сервер аяксом і оновляється div уже з відкритим номером. Можливо хтось розбирався який запит відправляється, що потрібнов ньому передавати і т. д.

4

Re: Парсер телефонів OLX

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

Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.

про номер телефону продавця. На кожній сторінці оголошення є номер телефону захищений від парсингу, потрібно клацнути на "Показати номер" щоб його побачити, потім відправляється запит на сервер аяксом і оновляється div уже з відкритим номером.

Хвантом вам у поміч Приклад коду для хвантома

Можливо хтось розбирався який запит відправляється, що потрібнов ньому передавати і т. д.

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

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: 221VOLT, leofun012

5

Re: Парсер телефонів OLX

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

Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.

про номер телефону продавця. На кожній сторінці оголошення є номер телефону захищений від парсингу, потрібно клацнути на "Показати номер" щоб його побачити, потім відправляється запит на сервер аяксом і оновляється div уже з відкритим номером. Можливо хтось розбирався який запит відправляється, що потрібнов ньому передавати і т. д.

Все досліджував тут: https://www.olx.ua/obyavlenie/dell-insp … tq58o.html
Це код контактной кнопки:

<div class="contact-button link-phone {'path':'phone', 'id':'tq58o', 'id_raw': '434730012'} atClickTracking contact-a activated" data-rel="phone">

Там є JSON запит: {'path':'phone', 'id':'tq58o', 'id_raw': ''434730012'}
Я визначив що AJAX запит приводить до такого посилання: https://www.olx.ua/ajax/misc/contact/phone/tq58o/?pt=67349056ca7fd24ab21127646ab4d8130e3fb9b38717a0dd395ec1a6565d403be636f717321408f4d6941022fc2fa74f14199f4fd3c018932de102c149be53df
Як формується цей 128-символьний хеш я не знайшов.

Yml0Y29pbjoxNmVTc0NyOXJySHBTV
DlGVmZjamV5djh5ZEtHM1NuNFNaCm
RvZ2Vjb2luOkROdXhrWExCaEh6eE1
wajFwbWhSdGlKWXZvWXJRckNiQjc=
Подякували: ostap34PHP, 0xDADA11C7, Faraon, 221VOLT4

6 Востаннє редагувалося Faraon (14.07.2017 14:33:17)

Re: Парсер телефонів OLX

перейшов по вашому посиланні https://www.olx.ua/ajax/misc/contact/ph … 4199f4fd3c вибило: {"value":"000 000 000"}
як я розумію то в них ще напевне стоїть перевірка звідки прийшов запит і якщо не від них то занулюють

7 Востаннє редагувалося /KIT\ (14.07.2017 15:26:45)

Re: Парсер телефонів OLX

Faraon написав:

перейшов по вашому посиланні https://www.olx.ua/ajax/misc/contact/ph … 4199f4fd3c вибило: {"value":"000 000 000"}
як я розумію то в них ще напевне стоїть перевірка звідки прийшов запит і якщо не від них то занулюють

Там кожний раз новий хеш робиться. Хоча обоє ID такі самі. Є підозрa, що час використовується як сіль.
p.s.:Здається, що використовується  FNV

Yml0Y29pbjoxNmVTc0NyOXJySHBTV
DlGVmZjamV5djh5ZEtHM1NuNFNaCm
RvZ2Vjb2luOkROdXhrWExCaEh6eE1
wajFwbWhSdGlKWXZvWXJRckNiQjc=
Подякували: ostap34PHP, 0xDADA11C7, Faraon, leofun01, 221VOLT5

8

Re: Парсер телефонів OLX

/KIT\
Приємно бачити ваш шлях на криптограхвічну вершину й взагалі як ви до успіху крокуєте
Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: ostap34PHP, 221VOLT, /KIT\, sensei4

9

Re: Парсер телефонів OLX

В коді сторінки є унікальний token

var phoneToken = '6899b398efd911d0cb20b0123dbac4f2f789003fdab41614c41f75ebe89cf8172e188ec0342dfe820c5d8cf098d5c988219beaa838bf80e90b4a9552cd58ab08';


Його можна зпарсити для AJAX запиту на https://www.olx.ua/ajax/misc/contact/ph … /?pt=ТОКЕН (це відразу не зпрацює через GET)
Підробку AJAX запиту можна здійснити через cURL (X-Requested-With: XMLHttpRequest), вказавши всі потрібні заголовки, включаючи cookies, referer і т.д (Потрібно зкопіювати всі хедери, які надсилає olx).

curl_setopt($curl, CURLOPT_HTTPHEADER, [
        "Host: www.olx.ua",
        "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
        "Accept: */*",
        "Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding: gzip, deflate, br",
        "Connection: keep-alive",
        "X-Requested-With: XMLHttpRequest",
        "Referer: https://www.olx.ua/obyavlenie/dell-inspiron-3537-vse-foto-rodnye-intel-core-i7-r9-12-ozu-ssd-hdd-IDtq58o.html",
       "Cookie: xtvrn=$540519$; dfp_user_id=0221793e-75ee-5162-9342-c9e702c483b0; onap=15a71b4da6dx234620bf-20-15d979f1e4bx7d95810a-7-1501490419; _ym_uid=1487966363688917704; atidvisitor=%7B%22name%22%3A%22atidvisitor%22%2C%22val%22%3A%7B%22vrn%22%3A%22-573055-%22%7D%2C%22options%22%3A%7B%22path%22%3A%22%2F%22%2C%22session%22%3A15724800%2C%22end%22%3A15724800%7D%7D; __utma=250720985.354698156.1487966363.1501447963.1501487375.24; __utmz=250720985.1501487375.24.16.utmcsr=replace.org.ua|utmccn=(referral)|utmcmd=referral|utmcct=/topic/8348/; incrementadblock_index_0=true; optimizelyEndUserId=oeu1487966363722r0.004989552504823136; optimizelySegments=%7B%221033243617%22%3A%22jooble%22%2C%221039805884%22%3A%22false%22%2C%221044912896%22%3A%22referral%22%2C%221099920464%22%3A%22ff%22%7D; optimizelyBuckets=%7B%7D; __gads=ID=e2637cbb11038754:T=1487966361:S=ALNI_MZFi5rBlVWwwhX-EiqZZ4J7upCZ2g; dfp_segment_test=72; incrementadblock_myaccount_0=true; cookieBarSeen=true; _ga=GA1.2.354698156.1487966363; dfp_segment_test_v2=31; fbm_1535830993316424=base_domain=.olx.ua; pa=1491461509080.4150.6175726803927399www.olx.ua0.41991163436763124+20; crtg_rta=; _gid=GA1.2.1708628718.1501448010; PHPSESSID=pclpksbqcst31i0l66abk2gc76; mobile_default=desktop; pt=7a8cbda64be574af3f6266b837091d265556e4ba258e48e6e276a303b27936e17d643924915ae8d49ee965841d54b4520e0c84f6938dc9eae58b150f673e22c5; ldTd=true; __utmb=250720985.9.8.1501488619479; __utmc=250720985; surveyPopupInited=%5B%22rollingNPSOLXUAwave1%22%5D; fbsr_1535830993316424=kvWK9Zzmsy9g2vJc-yVAG64TakvcJVELKB-gZLLH_is.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUR6MDZJb2JzX0RROVQyOTZXZFhNZTVWeWpjRHhTZW1oMEwxT1g2ZlQ4aFc1QVA3UjhySlhEaUYyejVjbHluaWJuSzlrZGFxNlFfZnFrWWFqazRYMlNDNmRHenlBN0p4NDhBYm9UQ1poVkJFZHNkS1ozQ09NUmlhbnk2cnY2Uk9XX3Q3QlgzMFJOM2lFZTQ3cVRScWk5T0NIeU84WU5oR1o2QmpGN19NT0NUNVRDajRVeVJQNU92SXRHOWpLTk5hS1lXX2s4bjZ6U0JEdjFFMGdWV014U0IzNE1jQ1Fta2dVLTRZdkxoTXNzYUU4NDdvVDBWbmE3LUxZZVo1a3RRbG13blFxVnU2eC03aVhOdjlqc0k4cXB6Tk5ZSDRhWE5CZjQ3UlZ0ODBKOUp3T3Q0VnBybkc4ajZpNDQ2RUNTU05ra01xYzZ6eElKblpTYUd2WFFHck1FSCIsImlzc3VlZF9hdCI6MTUwMTQ4NzQ5OSwidXNlcl9pZCI6IjU2NDY4MjI0NzAzNTUzOCJ9; __utmt=1; optimizelyPendingLogEvents=%5B%22n%3Dreply_phone_1step%26u%3Doeu1487966363722r0.004989552504823136%26wxhr%3Dtrue%26time%3D1501488619.502%26f%3D8455803748%26g%3D8229656681%22%2C%22n%3Dengagement%26u%3Doeu1487966363722r0.004989552504823136%26wxhr%3Dtrue%26time%3D1501488619.336%26f%3D8455803748%26g%3D1065653943%22%5D; mp_1799dc4067be971353b85127f766a0a4_mixpanel=%7B%22distinct_id%22%3A%20%2215a71b4ded3d-0105593ffe85fa-12616a4a-100200-15a71b4ded4142%22%2C%22%24initial_referrer%22%3A%20%22http%3A%2F%2Fprofiwm.ru%2Fall%2Fstr.php%3Furl%3Dhttp%3A%2F%2Folx.ua%22%2C%22%24initial_referring_domain%22%3A%20%22profiwm.ru%22%2C%22%24search_engine%22%3A%20%22google%22%2C%22utm_source%22%3A%20%22jooble%22%2C%22utm_medium%22%3A%20%22agr%22%2C%22utm_campaign%22%3A%20%22jooble%22%2C%22invite_source%22%3A%20%22sec%22%2C%22invite_campaign%22%3A%20%2237--GOO%22%2C%22invite_tracking_date%22%3A%201495374972%7D"
    ]);

Автоматизувати запис/встановлення куків зі сторінки - CURLOPT_COOKIEJAR / CURLOPT_COOKIEFILE
З'єднання по HTTPS(SSL), то curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);


Це так, навскидку, там ще може бути безліч підводних камнів, таких як наприклад якісь сесії в куках, які генеруються динамічно та ще й для кожного IP. І тому подібне..

Куди не кину оком стомленим – кругом ху…ня ©

10

Re: Парсер телефонів OLX

Де ви той токен знайшли? Який номер рядка? Бо я шукав і знайти не міг

Yml0Y29pbjoxNmVTc0NyOXJySHBTV
DlGVmZjamV5djh5ZEtHM1NuNFNaCm
RvZ2Vjb2luOkROdXhrWExCaEh6eE1
wajFwbWhSdGlKWXZvWXJRckNiQjc=
Подякували: ostap34PHP, 221VOLT2

11

Re: Парсер телефонів OLX

/KIT\ написав:

Де ви той токен знайшли? Який номер рядка? Бо я шукав і знайти не міг


574 .  Я теж спочатку думав, що він десь генерується js'ом, а не готовий.

Куди не кину оком стомленим – кругом ху…ня ©
Подякували: 0xDADA11C7, ostap34PHP, 221VOLT3

12

Re: Парсер телефонів OLX

Ось і весь "захист" :)

<?php

$url = 'https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html';

$cookie_path = $_SERVER['DOCUMENT_ROOT'].'/cookie.dat';

preg_match('|-ID(.*).html|', $url, $id);

$olx = curl_init($url);
curl_setopt($olx, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($olx, CURLOPT_RETURNTRANSFER, true);
curl_setopt($olx, CURLOPT_HEADER, 1);
curl_setopt($olx, CURLOPT_COOKIEFILE, $cookie_path);
curl_setopt($olx, CURLOPT_COOKIEJAR, $cookie_path);
$result = curl_exec($olx);
curl_close($olx);

preg_match("|phoneToken = '(.*)';|", $result, $token);

$olx_number = curl_init('https://www.olx.ua/ajax/misc/contact/phone/' . $id[1] . '/?pt=' . $token[1]);
    curl_setopt($olx_number, CURLOPT_HTTPHEADER, [
            'Host: www.olx.ua',
            'Accept: */*',
            'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate, br',
            'Connection: keep-alive',
            'X-Requested-With: XMLHttpRequest'
        ]);
        curl_setopt($olx_number, CURLOPT_REFERER, $url);
        curl_setopt($olx_number, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($olx_number, CURLOPT_COOKIEFILE, $cookie_path);
        curl_setopt($olx_number, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($olx_number, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($olx_number);
        curl_close($olx_number);
        
        $json = json_decode($result);
        echo $json->value;
Куди не кину оком стомленим – кругом ху…ня ©
Подякували: ostap34PHP, /KIT\, NagarD, 0xDADA11C7, leofun01, 221VOLT, sensei7

13

Re: Парсер телефонів OLX

VTrim написав:

Ось і весь "захист" :)

<?php

$url = 'https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html';

$cookie_path = $_SERVER['DOCUMENT_ROOT'].'/cookie.dat';

preg_match('|-ID(.*).html|', $url, $id);

$olx = curl_init($url);
curl_setopt($olx, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($olx, CURLOPT_RETURNTRANSFER, true);
curl_setopt($olx, CURLOPT_HEADER, 1);
curl_setopt($olx, CURLOPT_COOKIEFILE, $cookie_path);
curl_setopt($olx, CURLOPT_COOKIEJAR, $cookie_path);
$result = curl_exec($olx);
curl_close($olx);

preg_match("|phoneToken = '(.*)';|", $result, $token);

$olx_number = curl_init('https://www.olx.ua/ajax/misc/contact/phone/' . $id[1] . '/?pt=' . $token[1]);
    curl_setopt($olx_number, CURLOPT_HTTPHEADER, [
            'Host: www.olx.ua',
            'Accept: */*',
            'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate, br',
            'Connection: keep-alive',
            'X-Requested-With: XMLHttpRequest'
        ]);
        curl_setopt($olx_number, CURLOPT_REFERER, $url);
        curl_setopt($olx_number, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($olx_number, CURLOPT_COOKIEFILE, $cookie_path);
        curl_setopt($olx_number, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($olx_number, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($olx_number);
        curl_close($olx_number);
        
        $json = json_decode($result);
        echo $json->value;

При спробі набрати посилання запиту в браузері підставивши свіжий токен все одно повертає нулі, хоча браузер наче має надавати необхідні кукі. Ваш приклад працює бо задано CURLOPT_HTTPHEADER?
Просто в пхп не дуже розумію

14

Re: Парсер телефонів OLX

olx може виявитись розумним і змінити алгоритм) через це і не працює)

Навчаюсь вчитись, щоб навчатись.

15

Re: Парсер телефонів OLX

Ніяк не виходить відтворити ajax запит, відповідає тільки нулями

16

Re: Парсер телефонів OLX

йой, панове, шо ви місяцями в php граєтесь?
хіба не простіше написати userscript (my_script.user.js) і перестати паритись?

Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
Подякували: 0xDADA11C71

17

Re: Парсер телефонів OLX

Допоможіть правильно відправити запит, і отрімати відповідь. URL запиту: http://qlaster.ru/enterprises/16-470-pticefabriki GET

Заголовки запроса (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

18 Востаннє редагувалося 221VOLT (13.12.2017 14:04:27)

Re: Парсер телефонів OLX

slawon143 написав:

Допоможіть правильно відправити запит, і отрімати відповідь. URL запиту: http://qlaster.ru/enterprises/16-470-pticefabriki GET

Заголовки запроса (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

ssl:start(),
inets:start(),

Address = "http://qlaster.ru/enterprises/16-470-pticefabriki",

case httpc:request(get, {Address, 
[{"Host", "qlaster.ru"}, {"Accept-Encoding", "gzip, deflate"}, {"Referer", "http://qlaster.ru/"}, {"Pragma", "no-cache"}, {"User-Agent", "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0"}, {"Accept", "text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8"}, {"Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"}, {"Cookie", "PHPSESSID=707e0ad2026302b3fa09…02b3fa0963c4ca1aa935%22%3B%7D"}, {"Connection", "keep-alive"}, {"Upgrade-Insecure-Requests", "1"}, {"Cache-Control", "no-cache"}]},
[{ssl,[{verify,0}]}], []) of
{ok,{_Status, _Headers , Content}} ->
  % тут парсимо наш html - Content
  ;
_ ->
  % сюди попадаємо якщо у нас фейл запиту, повторюємо його
end,

% не забути зупинити вкінці
ssl:stop(),
inets:stop(),

це все причесати в функції
(+ дописати регулярки чи причепити якийсь готовий парсер),
закинути в модуль, скомпілювати і відправити ганяти по сайті ))

о, і ще кудить отриману інфо зберігати - в субд чи в файлик

erlang - ти космос !

Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
Подякували: Monolith1

19 Востаннє редагувалося 221VOLT (13.12.2017 14:21:32)

Re: Парсер телефонів OLX

slawon143 написав:

Допоможіть правильно відправити запит, і отрімати відповідь. URL запиту: http://qlaster.ru/enterprises/16-470-pticefabriki GET

Заголовки запроса (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

можна на js - ajax

йой жах російською

про юзерскрипти
https://habrahabr.ru/post/129343/

про аджакс
https://learn.javascript.ru/xhr-forms

заголовки ліпити якось так

xhr.setRequestHeader('Connection', 'keep-alive');
Прихований текст
ще можна було би розглянути Phantom.JS , тільки я уже все забув, як і php
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
Подякували: Monolith1