1

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

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

2

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

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

Подякували: ostap34PHP, 221VOLT, BarsicPlus, HetmanNet4

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-символьний хеш я не знайшов.

Подякували: ostap34PHP, 0xDADA11C7, Faraon, 221VOLT4

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

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

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

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

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

Faraon написав:

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

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

8

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

/KIT\

Приємно бачити ваш шлях на криптограхвічну вершину й взагалі як ви до успіху крокуєте

Подякували: ostap34PHP, 221VOLT, /KIT\, sensei4

9

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

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

Подякували: ostap34PHP, 221VOLT2

10

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

/KIT\ написав:

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


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

Подякували: 0xDADA11C7, ostap34PHP, 221VOLT3

11

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

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

12

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

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

13

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

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

Подякували: 0xDADA11C71

14

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

15 Востаннє редагувалося 221VOLT (13.12.2017 13: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

16 Востаннє редагувалося 221VOLT (13.12.2017 13: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

17

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;

Переклад мовою Python 3. Можливо, так комусь буде зручніше:

import re
import pycurl
from io import BytesIO
from bs4 import BeautifulSoup
import json

url="https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html"
b = BytesIO()
c = pycurl.Curl()
cookie_path = 'cookie.dat'
ID = re.findall("-ID(.*?)\.html", url)[0]
c.setopt(pycurl.URL, url)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.HEADER, 1)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.COOKIEJAR, cookie_path)
c.perform()
c.close()
data = b.getvalue()
soup = BeautifulSoup(data, "html.parser")
phoneToken = re.findall("var phoneToken = '(.*?)'", soup.text)[0]
phone_url='https://www.olx.ua/ajax/misc/contact/phone/{0}/?pt={1}'.format(ID, phoneToken)
bb = BytesIO()
c = pycurl.Curl()
c.setopt(pycurl.URL, phone_url)
c.setopt(pycurl.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'
        ])
c.setopt(pycurl.WRITEFUNCTION, bb.write)
c.setopt(pycurl.REFERER, url)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
c.perform()
c.close()
data = bb.getvalue()
try:
    json_data = json.loads(data)
    phoneNumber=json_data['value']
except:
    phoneNumber ='Перевірте номер за посиланням оголошення'
print(phoneNumber)
Подякували: shtyegor, /KIT\, 0xDADA11C7, ostap34PHP4

18

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

Nachtjagdgeschwader написав:
VTrim написав:

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

Переклад мовою Python 3. Можливо, так комусь буде зручніше:

import re
import pycurl
from io import BytesIO
from bs4 import BeautifulSoup
import json

url="https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html"
b = BytesIO()
c = pycurl.Curl()
cookie_path = 'cookie.dat'
ID = re.findall("-ID(.*?)\.html", url)[0]
c.setopt(pycurl.URL, url)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.HEADER, 1)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.COOKIEJAR, cookie_path)
c.perform()
c.close()
data = b.getvalue()
soup = BeautifulSoup(data, "html.parser")
phoneToken = re.findall("var phoneToken = '(.*?)'", soup.text)[0]
phone_url='https://www.olx.ua/ajax/misc/contact/phone/{0}/?pt={1}'.format(ID, phoneToken)
bb = BytesIO()
c = pycurl.Curl()
c.setopt(pycurl.URL, phone_url)
c.setopt(pycurl.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'
        ])
c.setopt(pycurl.WRITEFUNCTION, bb.write)
c.setopt(pycurl.REFERER, url)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
c.perform()
c.close()
data = bb.getvalue()
try:
    json_data = json.loads(data)
    phoneNumber=json_data['value']
except:
    phoneNumber ='Перевірте номер за посиланням оголошення'
print(phoneNumber)

Перекладено на PHP OOP з GuzzleHttp.

composer require guzzlehttp/guzzle:~6.0

<?php
require_once(__DIR__ . '\vendor\autoload.php');

$url = '/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html';
$phoneUrl = '/ajax/misc/contact/phone/{ID}?pt={TOKEN}';

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

$jar = new \GuzzleHttp\Cookie\CookieJar;
$client = new GuzzleHttp\Client([
    'base_uri' => 'https://www.olx.ua/',
    'cookies' => $jar,
    'headers' => [
        'user-agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405',
    ]
]);

$response = $client->request('GET', $url);
preg_match("|phoneToken = '(.*)';|", $response->getBody()->getContents(), $matchToken);
$token = end($matchToken);

$phoneUrl = str_replace(['{ID}', '{TOKEN}'], [$id, $token], $phoneUrl);
$response = $client->request('GET', $phoneUrl);

echo(json_decode($response->getBody()->getContents())->value);
?>
Подякували: 0xDADA11C7, ostap34PHP, free_net, /KIT\4

19

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

Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((

20

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

AndK написав:

Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((

Ключ - поле Referer. Якщо цікаво - є вже готовий парсер, за певну і доволі скромну винагороду можу поділитись.

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