You've answered your own question - you cave in. She's not a shopaholic - she sees tempting things and, like any 3 year old, wants them. She's learned that crying bitterly gets her what she wants. You will have this forever if you don't nip in in the bud. Crying and manipulation cannot be allowed - you are letting her be the boss because it's easier to give in at that moment than to tough it out and have a miserable shopping experience. The problem is, it only calms her down for that trip, and she's learned what to do on the next trip.
You can give her some choices - would you rather have pears or apples? Broccoli or beans? - but make those for "tonight" and not things she doesn't have to have or try at some point. She's looking for some control and you can give it in small areas that meet your own values.
If she has a tantrum, ignore it no matter how much you feel embarrassed - we all go through it. Otherwise, grab only what you really need, zip through the check-out, and go home. She can realize that you didn't have time to buy cookies or her favorite peanut butter because her tantrum was bothering everyone or keeping you from thinking straight.
I mean, really, SO WHAT if she cries? You are not a bad mom because you don't buy her whatever she wants. What's going to happen when she's an adult? She won't know how to make choices, to value things, because she never had to really want things or wait for them or work for them.
She's not a brat - she's being normal. But she will become a brat if she is indulged, and you don't want that for her. If you really have a major shopping trip to do, like for a holiday or party where you really have to concentrate and get everything on your list, then don't take her. But otherwise she has to learn to be in situations like this. Go for several short trips and, if she can't control herself, make it a point to leave with her and say "Well, we couldn't get what we needed because of your crying. Sometimes Mommy has to say no." Don't keep talking about it - just ignore it. Once she doesn't get a payoff for crying (the payoff either being your undivided attention, or the desired item), she'll figure out that this tactic doesn't work. However, don't then give in and say, "You were so good at the store, Mommy will buy you a treat." Then it starts all over again! If she's good, the "treat" should be special time with Mom to play a game or do a puzzle. And that's AFTER the groceries get put away. If she does not behave, then put her in her room until she calms down, and let her know that all that crying time COULD have been game-playing time or book time. Oh well, she chose to spend it crying.
You will see - it will be awful the first few times and then it will go away! Hang in there!