Scrapy - 传递回应

时间:2016-07-20 12:07:54

标签: python ajax scrapy web-crawler scrapy-spider

我需要在页面上获取每个对象的标题和电话号码。

但电话号码显示为 - 0527 ... getphone

getphone:

<a id="phone" onclick="jQuery( '#Handy1').load(
'/ajax/detail/displayphonenumber.php?coded=MDE3Mi8gODUwNzQzMg--&amp;adno=170868912&amp;adsource=quoka+online&amp;catid=27_2710&amp;cusno=19128806' )">getphone</a>

ONCLICK - 使用个人数据制作ajax(针对每个对象)并下载表单中的完整电话号码 -

<span>0527555777000</span>

但是当没有电话号码时,情况可能会发生。因此我会'尝试除''onclick'变量。

我正在尝试执行ajax并获取完整的电话号码然后将包含电话号码的页面传递到parse_item()

但我遇到了麻烦。当我使用pdb进行调试时,我在parse_item()== http://www.example.com/ajax/detail/displayphonenumber.php中看到了该响应,而不是对象页面

我该如何解决?非常感谢!

P.S。请不要提出任何工具..只有Scrapy解决方案

def parse(self, response):
        urls = response.xpath('//div/a/@href').extract()
        for url in urls:
            absolute_url = response.urljoin(url)
            request = scrapy.Request(absolute_url, callback=self.phone)
            yield request


def phone(self, response):
        try:
            onclick = response.xpath('//a[@id="phone"]/@onclick').extract()[0]
        except:
            onclick = None    
        if onclick:            
            click_split = onclick.split('?')
            params = click_split[1]
            params_split = params.split('&')
            coded = params_split[0].split('=')
            adno = params_split[1].split('=')
            adsource = params_split[2].split('=')
            catid = params_split[3].split('=')
            cusno = params_split[4].split('=')

            return [ FormRequest("http://www.example.com/ajax/detail/displayphonenumber.php",
                                    formdata={'coded': coded[1],
                                              'adno': adno[1],
                                              'adsource': adsource[1],
                                              'catid': catid[1],
                                              'cusno': cusno[1]},
                                    callback=self.parse_item) ]
        else:
            self.parse_item(response)


def parse_item(self, response):
        item = LotItem()

        try:
            item['title'] = response.xpath('//h1/text()').extract()[0]
        except:
            item['title'] = 'no title'

        try:
            item['phone_number'] = response.xpath('//ul/li/text()').extract()[0]
        except:
            item['phone_number'] = 'no phone number'

        yield item

0 个答案:

没有答案