Recently, Wireless Sensor Networks (WSNs) have attracted lot of attention due to their pervasive nature and their wide deployment in Internet of Things, Cyber Physical Systems, and other emerging areas. The limited energy associated with WSNs is a major bottleneck of WSN technologies. To overcome this major limitation, the design and development of efficient and high performance energy harvesting systems for WSN environments are being explored. We present a comprehensive taxonomy of the various energy harvesting sources that can be used by WSNs. We also discuss various recently proposed energy prediction models that have the potential to maximize the energy harvested in WSNs. Finally, we identify some of the challenges that still need to be addressed to develop cost-effective, efficient, and reliable energy harvesting systems for the WSN environment.