If your ATmega328P is already set to use the internal 8MHz clock AND you are burning a bootloader that uses the internal 8MHz clock then it may work.
If the ATmega328P already has a bootloader that uses a 16 MHz (or 8MHz) crystal/resonator OR the bootloader you are burning is for a system with a crystal/resonator then you must have the crystal (and capacitors) or resonator in place when you program the bootloader.
I cannot find a link but there is an ArduinoISP programmer out there somewhere that produces a 8Mhz clock output on a pin for programming without the need of a crystal. I also seem to remember being told/reading that it will also work with programming an 16Mhz as the MPU is just looking for an external clock.
Riva:
I cannot find a link but there is an ArduinoISP programmer out there somewhere that produces a 8Mhz clock output on a pin for programming without the need of a crystal. I also seem to remember being told/reading that it will also work with programming an 16Mhz as the MPU is just looking for an external clock.
You hook Pin 9 to the XTL1 pin of the target processor (that's the 9th pin down the left side if the end with the dot/notch is pointed up). This forces an 8 MHz clock into the timing circuitry to replace the missing crystal/resonator.
It will definitely work without 16Mhz crystal and the caps. The 328 will just use its internal 8Mhz oscillator which is good for most applications other than those using high Baud rates or keeping accurate time. In the arduinotobreadboard link there is instructions on how to do just that! its under the heading Minimal Circuit (Eliminating the External Clock).