How can I get the rotatation with fcurves.find()?
From blender 2.76 we can use fcurves.find(data_path, index) to get specific fcurves for an object. The fcurves for rotation data may be stored under several different data_path values depending on what rotation_mode was enabled when the keyframes were added.

Of the eight possible values for rotation_mode three different data_path values are used, one is rotation_quaternion, one is rotation_axis_angle and the other is rotation_euler that is used by all six permutations of XYZ used for euler rotation modes.

import bpy

obj = bpy.context.object
obj_fcurves = obj.animation_data.action.fcurves

if obj.rotation_mode == 'QUATERNION':
    w_fcurve = obj_fcurves.find('rotation_quaternion', index=0)
    x_fcurve = obj_fcurves.find('rotation_quaternion', index=1)
    y_fcurve = obj_fcurves.find('rotation_quaternion', index=2)
    z_fcurve = obj_fcurves.find('rotation_quaternion', index=3)
elif obj.rotation_mode == 'AXIS_ANGLE':
    w_fcurve = obj_fcurves.find('rotation_axis_angle', index=0)
    x_fcurve = obj_fcurves.find('rotation_axis_angle', index=1)
    y_fcurve = obj_fcurves.find('rotation_axis_angle', index=2)
    z_fcurve = obj_fcurves.find('rotation_axis_angle', index=3)
else:
    x_fcurve = obj_fcurves.find('rotation_euler', index=0)
    y_fcurve = obj_fcurves.find('rotation_euler', index=1)
    z_fcurve = obj_fcurves.find('rotation_euler', index=2)


For versions before 2.76 fcurves.find() is a generic find that doesn't work as expected, in this case you need to loop through the curves to find the one you want.

for c in obj_fcurves:
    if c.data_path == 'rotation_quaternion':
        if c.array_index == 0:
            w_fcurve = c
        elif c.array_index == 1:
            x_fcurve = c
        elif c.array_index == 2:
            y_fcurve = c
        elif c.array_index == 3:
            z_fcurve = c