scrapy抓取ajax请求的网页

在上一篇博客

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

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

仍然是spiders/book.py:

Java代码   收藏代码
  1. class BookSpider(CrawlSpider):    
  2.     ................  
  3.     ................  
  4.     ................  
  5.     def parse_item(self, response):    
  6.         hxs = HtmlXPathSelector(response)    
  7.         item = BookItem()    
  8.         ........  
  9.         ..........  
  10.         #这里url是虚构的,使用时需要修改  
  11.         url =  "http://test_url/callback.php?ajax=true"  
  12.         request =  Request(url, callback=self.parse_ajax)  
  13.         request.meta['item'] = item  
  14.         #这里将ajax的url找出来,然后够找请求,框架执行请求收到返回后再回调  
  15.         yield request  
  16.   
  17.     def parse_ajax(self, response):  
  18.         data = response.body  
  19.         #这里写正则匹配或者选择XPathSelector获取需要捕获的数据,略  
  20.         ajaxdata = get_data(data)  
  21.   
  22.         #由于返回可能是js,可以采用python来模拟js解释器,不过这里偷懒就用json来进行转换  
  23.         if ajaxdata:  
  24.             x = '{"data": "' + ajaxdata.replace('\n''') + '"}'  
  25.             ajaxdata = simplejson.loads(x)['data']  
  26.         else:  
  27.             ajaxdata = ''  
  28.          
  29.         item = response.meta['item']  
  30.         item['ajaxdata'] = ajaxdata  
  31.         for key in item:  
  32.             if isinstance(item[key], unicode):  
  33.                 item[key] = item[key].encode('utf8')  
  34.         #到这里一个Item的全部元素都抓齐了,所以返回item以供保存  
  35.         return item  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值