Russian President Vladimir Putin on Thursday claimed the "liberation" of the flattened city of Mariupol after nearly two months of fighting, but signalled he would forgo a final bloody offensive against beleaguered Ukrainian defenders there.

The fate of the besieged port has become totemic as Russia battles to complete a land bridge covering territories of Ukraine already under its control, including Crimea.

The West staged another show of support for President Volodymyr Zelensky with a visit to Kyiv by the Spanish and Danish prime ministers, a day after European Council leader Charles Michel came and vowed the EU would do "everything possible" to help Ukraine win the war.

Zelensky said Ukraine still did not have enough weapons, despite billions in Western military aid that has forced Russia to re-focus its offensive away from Kyiv and towards the east of the country.

In morgues around the capital, the bodies of some 1,020 civilians are being stored after Russian troops withdrew from the region, Deputy Prime Minister Olga Stefanishyna told AFP.

The bodies of nine civilians, some showing signs of torture, have been found in the town of Borodyanka outside Kyiv, the region's police chief Andriy Niebytov said.

"The Russian military knowingly shot civilians who did not put up any resistance," he said, adding that one of the victims was a 15-year-old girl.

- Biden 'proud' - While the West remains nervous about igniting a direct conflict with nuclear-armed Russia, US President Joe Biden said he was "amazed" by Ukrainian resistance since the invasion began on February 24.

"They're tougher and more proud than I thought," he said, adding that Western "weapons and ammunition are flowing in daily".

The Pentagon had said Ukraine was receiving fighter planes to bolster its air force -- but it later said only aircraft parts had been delivered. However, the flow of hardware, including anti-tank missiles, has not prevented Russia from carving a trail of destruction across Ukraine, not least in Mariupol on the shores of the Sea of Azov in the southeast.

"Mariupol has been liberated," Russian Defence Minister Sergei Shoigu told Putin during a televised meeting. "The remaining nationalist formations took refuge in the industrial zone of the Azovstal plant."

Shoigu said around 2,000 Ukrainian soldiers remained inside the giant steel plant, where the last pocket of Ukrainian resistance has been sheltering in a network of underground tunnels.

Thousands of civilians are believed to have died in the besieged city, and up to 2,000 others are also sheltering in the plant without access to drinking water or food, according to Ukrainian authorities.

Putin said the "liberation" of Mariupol was a "success" for Russian forces but ordered Shoigu to call off the planned storming of the industrial area, dismissing it as "impractical".

"There is no need to climb into these catacombs and crawl underground through these industrial facilities. Block off this industrial area so that not even a fly can escape," Putin said.