how to render semi-transparent objects with transparent background as a png with cycles
You can use a Holdout shader:



The holdout shader will render as actual image alpha, as opposed to giving the color of the environment on the other side of the object.

Or you could use a Transparent shader, which will allow other objects to be visible through the transparent object:



Note that transparent in Render settings > Film must be enabled, otherwise the holdout shader will appear black and the transparent shader will show the environment behind it. You did mention that you already did this, so you should be good.