I wish to get nodes that belong to a particular city. I tried doing a radius search around the latitude and longitude of the city but that is just an approximation. Moreover the radius varies from one city to another. Is there a good way to do this using Open Street Maps?
When there is a boundary relation for that city area (like political boundaries) you can use its name for a query via overpass-api or overpass-turbo.
So first find out about any good boundary relation within the OSM data: go to http://nominatim.openstreetmap.org and try to find a boundary relation for your city ... for example type "Buxtehude" in its search box there (Buxtehude is a small city in the north of Germany) ... see the results and its detail links.
With that background knowledge vidit http://overpass-turbo.eu and use its wizard modus: Try "shop=* in Buxtehude" there ... without ""
Thus you can limit any query via overpass-api or overpass-turbo (or even QuickOSM-Plugin in QGIS) to any city area as long as we have boundaries for that in the OSM data.
Please refer to the documentation of overpass-api and overpass turbo at wiki.osm.org
If you get stuck about a boundary is present or not, tell us the name of the city we can use for testing purposes.
Tell us here about success or failure in general.