scrapy抓取ajax请求的网页

在上一篇博客

http://zhouxi2010.iteye.com/blog/1450177

中介绍了用scrapy抓取网页,但是只能抓取普通html中的链接,对于ajax请求的网页却抓不到,但是实际应用中ajax请求又是十分普遍的,所以这里在记录下抓取ajax页面的方法.

仍然是spiders/book.py:

class BookSpider(CrawlSpider):  
    ................
    ................
    ................
    def parse_item(self, response):  
        hxs = HtmlXPathSelector(response)  
        item = BookItem()  
        ........
        ..........
        #这里url是虚构的,使用时需要修改
        url =  "http://test_url/callback.php?ajax=true"
        request =  Request(url, callback=self.parse_ajax)
        request.meta['item'] = item
        #这里将ajax的url找出来,然后够找请求,框架执行请求收到返回后再回调
        yield request

    def parse_ajax(self, response):
        data = response.body
        #这里写正则匹配或者选择XPathSelector获取需要捕获的数据,略
        ajaxdata = get_data(data)

        #由于返回可能是js,可以采用python来模拟js解释器,不过这里偷懒就用json来进行转换
        if ajaxdata:
            x = '{"data": "' + ajaxdata.replace('\n', '') + '"}'
            ajaxdata = simplejson.loads(x)['data']
        else:
            ajaxdata = ''
       
        item = response.meta['item']
        item['ajaxdata'] = ajaxdata
        for key in item:
            if isinstance(item[key], unicode):
                item[key] = item[key].encode('utf8')
        #到这里一个Item的全部元素都抓齐了,所以返回item以供保存
        return item
 

你可能感兴趣的:(Ajax,scrapy,python,抓取)