- 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 при парсинге )