六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 17|回复: 0

scrapy抓取ajax请求的网页

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-29 10:33:23 | 显示全部楼层 |阅读模式
在上一篇博客
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表