mfc ajax爬虫,Scrapy抓取Ajax数据

以新版简书网站为例,新网站很多地方采用了ajax(异步JavaScript和XML),大大提高了页面加载的速度。

对于一些数据抓取来说,就增加了复杂度,ajax数据从源代码里找不到。如下图,一篇文章页面中的评论信息和哪些专题进行了收录,都在源代码中看不到。

一、抓包分析

使用抓包工具Fiddler 或 Chrome "检查"进行分析。文中使用的是Chrome 工具。Chrome -- "检查" -- 切换到 “Network”,这时候刷新一下网页。找到发送 收录专题的请求(request)。

1ecf087ac741

注意:一个页面通常会有几十个请求(这个页面有89个),包括网页文档(document), 脚本(script),图片(jpeg),还有一种类型叫 xhl 就是 XMLHttpRequest, 我们要找的异步请求类型。比较一下名字,找到我们所要的请求。

点击它,就看到完整的URL了。

1ecf087ac741

http://www.jianshu.com/notes/8777855/included_collections?page=1

注意,这个URL放到地址栏访问发现并不没有返回我们所要的数据,而是一个404页面。但看一下返回的Response,就是我们所需要的JSON数据。

1ecf087ac741

怎么办?把url改成.json结尾,就可以在地址栏访问看到数据了。

http://www.jianshu.com/notes/8777855/included_collections.json

这里就完成了第一步,最关键的问题是如何获取url里的这个id 8777855,如果我们能找到这个id,就可以构造一个url获得json数据。

二、构造目标地址

方法:查看网页源代码。刚刚不是说了,源代码里没有我们所需要的数据吗?查什么呢,搜这个数字id 8777855,看一下,果然有,它在一些标签里,作为 content值的一部分。

那就好办了。解析meta标签,拿到id。

def parse(self,response):

selector = Selector(response)

infos = selector.xpath("//meta/@content").extract()

id = ''

for info in infos:

if (str(info).find('jianshu://notes/')) ==0 :

id = filter(str.isdigit,str(info))

break;

collection_url ='http://www.jianshu.com/notes/%s/included_collections.json'%id

yield Request(collection_url,callback=self.parse_json)

OK, 这样就构造好了一个目标url。

三、解析json数据

这一步就比较简单,引入json包,进行解析。当然做这步时,需要先发送一个请求。

def parse_json(self,response):

data = json.loads(response.body)

collect = data['collections']

cols=''

if len(collect) >0 :

for cc in collect:

cols += cc['title']+';'

以上步骤的分析和解析json的方法也适用一般Python爬虫。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值