Тема: Парсер телефонів OLX
Привіт всім. Потрібно парсити з сторінки телефон на олх, але так як він захищений то не знаю як це зробити, можливо хтось вже з цим розбирався і підкаже як це все повинно відбуватися
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → PHP → Парсер телефонів OLX
Привіт всім. Потрібно парсити з сторінки телефон на олх, але так як він захищений то не знаю як це зробити, можливо хтось вже з цим розбирався і підкаже як це все повинно відбуватися
Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.
Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.
про номер телефону продавця. На кожній сторінці оголошення є номер телефону захищений від парсингу, потрібно клацнути на "Показати номер" щоб його побачити, потім відправляється запит на сервер аяксом і оновляється div уже з відкритим номером. Можливо хтось розбирався який запит відправляється, що потрібнов ньому передавати і т. д.
0xDADA11C7 написав:Що і як захищено, не розумію. Й про який телехвон йде мова. А взагалі - вчіть Phantom JS і буде вам щастя.
про номер телефону продавця. На кожній сторінці оголошення є номер телефону захищений від парсингу, потрібно клацнути на "Показати номер" щоб його побачити, потім відправляється запит на сервер аяксом і оновляється div уже з відкритим номером.
Хвантом вам у поміч Приклад коду для хвантома
Можливо хтось розбирався який запит відправляється, що потрібнов ньому передавати і т. д.
Продавці й кардери -- пропащі люди, які нікому не допоможуть, навіть якщо щось знатимуть, жлоби коротше.
del
перейшов по вашому посиланні https://www.olx.ua/ajax/misc/contact/ph … 4199f4fd3c вибило: {"value":"000 000 000"}
як я розумію то в них ще напевне стоїть перевірка звідки прийшов запит і якщо не від них то занулюють
Де ви той токен знайшли? Який номер рядка? Бо я шукав і знайти не міг
Де ви той токен знайшли? Який номер рядка? Бо я шукав і знайти не міг
574 . Я теж спочатку думав, що він десь генерується js'ом, а не готовий.
olx може виявитись розумним і змінити алгоритм) через це і не працює)
Ніяк не виходить відтворити ajax запит, відповідає тільки нулями
йой, панове, шо ви місяцями в php граєтесь?
хіба не простіше написати userscript (my_script.user.js) і перестати паритись?
Допоможіть правильно відправити запит, і отрімати відповідь. 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
Допоможіть правильно відправити запит, і отрімати відповідь. 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 - ти космос !
Допоможіть правильно відправити запит, і отрімати відповідь. 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
заголовки ліпити якось так
xhr.setRequestHeader('Connection', 'keep-alive');
Ось і весь "захист"
<?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)
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);
?>
Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((
Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((
Ключ - поле Referer. Якщо цікаво - є вже готовий парсер, за певну і доволі скромну винагороду можу поділитись.