mfc ajax爬虫,Scrapy抓取Ajax数据

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

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

一、抓包分析

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

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

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

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

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

怎么办?把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爬虫。

你可能感兴趣的:(mfc,ajax爬虫)