1

Тема: OLX.ua - Не працює парсер

Намагаюсь реалізувати парсинг номера з olx.ua. Коротко, при натисканні "показати номер" виконується ajax запит (перший додаток) який в query string надсилає phoneToken. Токен вшито в код сторінки, генерується сервером і присилається щоразу новий. Написав парсер, що отримує токен та надсилає запит по ньому, але відповідає лише {"value":"000 000 000"}.

#just random olx page
req = requests.request('GET', 'https://www.olx.ua/obyavlenie/stroitelnye-raboty-IDo1d9s.html', data=hdr1)
print("ok")
ff = open("data.html", "w+", encoding="utf-8")
webpage = req.text
ff.write(webpage)
ff.close()
#extracting token
f1 = open("data.html", "r+", encoding='UTF-8')
rr = re.compile(r'phoneToken = \'(.+)\'')
s = ''
for line in f1:
    a = re.search(rr, line)
    if a:
        s = a[1]
        print(a[1])
f1.close()

reqstr = 'https://www.olx.ua/ajax/misc/contact/phone/o1d9s/?pt='+str(s)
print(reqstr)
#using cookies from previous request
coo = req.cookies
print(coo)
req2 = requests.request('GET', reqstr, data=hdr, cookies=coo)

print(req2.text)

де

hdr = {'Host': 'www.olx.ua',
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'DNT':1,
'Referer': 'https://www.olx.ua/obyavlenie/stroitelnye-raboty-IDo1d9s.html',
'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'
}

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

З.І. Є отака тема replace.org.ua/topic/8348/ де теж розібрано захист оелікс від скрапперів і є код на PHP, що начебто працював влітку. В PHP не тямлю, але чисто інтуїтивно здається мій код робить те саме, хіба що айді не витягає з коду сторінки. То це я шось криво написав, чи в оелікс змінили захист?

Post's attachments

attachment1.JPG 126.4 kb, 200 downloads since 2017-11-22