By implementing algorithmic versions of Sapozhenko's graph container methods, we give new algorithms for approximating the number of independent sets in bipartite graphs. Our first algorithm applies to 𝑑-regular, bipartite graphs satisfying a weak expansion condition: when 𝑑 is constant, and the graph is a bipartite Ω(log 2 𝑑∕𝑑)-expander, we obtain an FPTAS for the number of independent sets. Previously such a result for 𝑑 > 5 was known only for graphs satisfying the much stronger expansion conditions of random bipartite graphs. The algorithm also applies to weighted independent sets: for a 𝑑-regular, bipartite 𝛼-expander, with 𝛼 > 0 fixed, we give an FPTAS for the hard-core model partition function at fugacity 𝜆 = Ω(log 𝑑∕𝑑 1∕4 ). Finally we present an algorithm that applies to all 𝑑-regular, bipartite graphs, runs in time exp, and outputs a (1+o(1))-approximation to the number of independent sets.