- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
def price_request(self, response):
# ебануцо
t = TakeFirst()
magic_data = {'__ASYNCPOST': 'true'}
# --- забираю зашитые данные из форм
keys = [
'__BOOKMARKERbmTabs',
'__VIEWSTATE',
'__VIEWSTATEGENERATOR',
'__EVENTVALIDATION',
'HiddenField'
]
for k in keys:
val = response.xpath('//input[contains(@id, "%s")]/@value' % k).extract()
key = response.xpath('//input[contains(@id, "%s")]/@name' % k).extract()
if key:
magic_data[t(key)] = t(val) or ''
val = response.xpath('//input[contains(@value, "btnGetPrice")]/@value').extract()
key = response.xpath('//input[contains(@value, "btnGetPrice")]/@name').extract()
if key:
magic_data[t(key)] = t(val) or ''
# --- неведомая херня из js
# вызов получения цены
js = response.xpath(u'//script[contains(text(), "$(document).ready(function ()")][contains(text(), "__doPostBack")]').re(
"__doPostBack\('([^']+)','([^']*)'\)")
# [\$\w0]+btnGetPrice
magic_data['__EVENTTARGET'] = js[0]
# обычно ''
magic_data['__EVENTARGUMENT'] = js[1]
# ключ от сервера, скорее всего он связан с сессией
js = response.xpath(u'//script[contains(text(), "Sys.Application.setServerId")]').re('\("([^"]+)", "([^"]*)"\)')
super_magic_key = js[1]
# --- опять данные из формы которые туда должны при ините странице соваться
js = response.xpath(u'//script[contains(text(), "Sys.WebForms.PageRequestManager._initialize")]').re("'form1', \[([^\]]+)\]")[0]
super_magic_values = re.findall("'([^']+)'", js)
super_magic_value_1 = super_magic_values[0]
for m in super_magic_values[1:len(super_magic_values)]:
if m:
magic_data[m] = ''
# хер его знает почему, но первую букву надо откусить, обычно это t
super_magic_value1 = super_magic_value_1[1:len(super_magic_value_1)]
# составное значение вида [\$\w0]+=[\$\w0]+$updPrice|[\$\w0]+btnGetPrice
magic_data[super_magic_key] = super_magic_value1 + '|' + magic_data['__EVENTTARGET']
return FormRequest(url=response.url,
formdata=magic_data,
dont_filter=True,
meta=response.meta,
callback=self.parse_price,
method='post',
headers={'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'X-MicrosoftAjax': 'Delta=true',
'Origin': 'http://www.exist.ru',
'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate',
'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27'
})
То что случается если жалко ресурсов на запуск js при парсинге )
3_14dar 09.06.2015 15:21 # −1
>super_magic_value_1[1:len(super_magic_value_1)]
Здесь говно?
kyzi007 09.06.2015 16:57 # 0
roman-kashitsyn 09.06.2015 17:02 # +1
kyzi007 09.06.2015 17:21 # 0
guest 09.06.2015 15:44 # 0
guest 09.06.2015 21:09 # 0
guest 09.06.2015 21:19 # 0
Другой вопрос что гидроцефалы в какой-то момент решили что HTML может не быть XMLем и теперь XPATH в HTML5 можно и не написать.
inkanus-gray 10.06.2015 20:55 # 0
Stertor 10.06.2015 21:15 # 0
Базуер как-то там c хуем на пополам себе всё это парсит, что-то додумывает, рекаверится из ошибок, строит в памяти НОРМАЛЬНОЕ дерево (проверьте инспект элементом -- там сингл рут дерево, нормальный направленный граф же) и дальше оно работает.
Кстати: "строятся по похожему" != "реализация XPATH". Где Вы видели в XPATH понятие "класса "(точечка) например?
3_14dar 11.06.2015 06:52 # +1
inkanus-gray 11.06.2015 15:18 # 0
bakagaijin 11.06.2015 15:23 # +2
inkanus-gray 11.06.2015 15:32 # +1
http://www.w3.org/TR/html5/introduction.html#html-vs-xhtml
Но какие-то идиоты придумали секцию 1.9, в которой написали, что браузер сам закрывает незакрытые теги, и 8.2.5.3, в которой перечислили теги, которые можно не закрывать.
Нафига вообще вся восьмая глава, если можно было обойтись XHTML?
kyzi007 09.06.2015 21:46 # 0
kyzi007 09.06.2015 21:47 # 0
guest 09.06.2015 21:51 # +1
kyzi007 09.06.2015 21:55 # +3
3_14dar 10.06.2015 04:48 # 0
3_14dar 10.06.2015 04:48 # −1
Тут можно было бы с таким же успехом от dom отказаться.
kyzi007 10.06.2015 08:37 # 0
Lure Of Chaos 10.06.2015 18:42 # +1
inkanus-gray 10.06.2015 19:01 # +2
kyzi007 10.06.2015 20:13 # +1
inkanus-gray 10.06.2015 20:48 # +1
Вопрос в другом. Если говнокод составляет такой заголовок (X-MicrosoftAjax и Safari в одном запросе), значит, сервер его требует. Но зачем? Но все же знали, что он работает не на Спектруме!
Vasiliy 10.06.2015 22:38 # +1
Есть же ебнутые на всю голову программисты сайты которых начинают ридеректить пользователя в зависимости от заголовков.
kyzi007 11.06.2015 08:59 # 0
3_14dar 11.06.2015 09:07 # −1
Так это фреймверк или хуйня головного мозга?
>У меня много юезерагентов )
Лучше было бы такой функционал встроить в http библиотеку. Ты чем пользуешься?
kyzi007 11.06.2015 09:16 # 0
3_14dar 11.06.2015 11:30 # −1
А это что? В grablib есть случайный user agent (но он как и его автор ебанутый)
kyzi007 11.06.2015 12:52 # 0
kyzi007 11.06.2015 12:53 # 0
Stertor 11.06.2015 12:58 # −1
kyzi007 11.06.2015 14:55 # 0
Stertor 11.06.2015 15:51 # −2
kyzi007 11.06.2015 14:58 # 0
Stertor 11.06.2015 12:57 # −1
'X-Requested-With': 'XMLHttpRequest',
'X-MicrosoftAjax': 'Delta=true',
'Origin': 'http://www.exist.ru',
остальное должна проставлять библиотека
inkanus-gray 11.06.2015 15:22 # +2
Например, были проблемы со входом через OpenID Живого Журнала на сайте, к которому я прикрутил библиотеку с janrain.com. Оказалось, что Livejournal возвращает код ошибки или вообще пустую страницу, если ему не нравится User-Agent. Пришлось патчить эту библиотеку, добавляя заголовки, которые понравятся Живому Журналу.
Stertor 11.06.2015 15:51 # −2
Stertor 12.06.2015 18:50 # −2
guest 12.06.2015 20:45 # +1
Stertor 12.06.2015 21:58 # −1
Тогда это и не библиотека вовсе. Это, мил человек, больница.
kyzi007 11.06.2015 09:02 # −1
guest 13.06.2015 02:40 # −2
давай поговорим о дырках?
guest 13.06.2015 16:13 # −2
guest 13.06.2015 16:14 # −2
Stertor 13.06.2015 16:20 # −2
guest 13.06.2015 16:47 # −2
как дила?
Stertor 13.06.2015 19:06 # −2
guest 16.06.2015 02:11 # −1
Stertor 16.06.2015 21:25 # 0
guest 16.06.2015 21:44 # 0
Stertor 16.06.2015 23:07 # 0
Stertor 12.06.2015 16:07 # −2
Stertor 12.06.2015 18:44 # −2
Попробуй шарики от подшипников вставлять в анус. Меня в своё время прикалывало, правда, потом я протолкнул шарик слишком глубоко (доигрался, пидорок!!!) и меня повели с позором к врачу.
guest 12.06.2015 20:45 # +1
Stertor 12.06.2015 22:34 # −1
Qwertiy 19.06.2015 23:19 # +1