Python .replace running twice
<p>Still pretty new to python and first time using .replace and I am running into a weird issue.</p>

<pre><code>url_base = 'http://sfbay.craigslist.org/search/eby/apa'
params = dict(bedrooms=1, is_furnished=1)
rsp = requests.get(url_base, params=params)
# BS4 can quickly parse our text, make sure to tell it that you're giving           html
html = bs4(rsp.text, 'html.parser')

# BS makes it easy to look through a document
#print(html.prettify()[:1000])

# BS4 can quickly parse our text, make sure to tell it that you're giving html
html = bs4(rsp.text, 'html.parser')

# BS makes it easy to look through a document
print(html.prettify()[:1000])
# find_all will pull entries that fit your search criteria.
# Note that we have to use brackets to define the `attrs` dictionary
# Because "class" is a special word in python, so we need to give a string.
apts = html.find_all('p', attrs={'class': 'row'})
print(len(apts))

# We can see that there's a consistent structure to a listing.
# There is a 'time', a 'name', a 'housing' field with size/n_brs, etc.
this_appt = apts[15]
print(this_appt.prettify())

# So now we'll pull out a couple of things we might be interested in:
# It looks like "housing" contains size information. We'll pull that.
# Note that `findAll` returns a list, since there's only one entry in
# this HTML, we'll just pull the first item.
size = this_appt.findAll(attrs={'class': 'housing'})[0].text
print(size) , 'this is the size'

def find_size_and_brs(size):
    split = size.strip('/- ').split(' - ')
    print len(split)
    if 'br' in split[0] and 'ft2' in split[0]:
        print 'We made it into 1'
        n_brs = split[0].replace('br -', '',)
        this_size = split[0].replace('ft2 -', '')
    elif 'br' in split[0]:
        print 'we are in 2'
        # It's the n_bedrooms
        n_brs = split[0].replace('br', '')
        this_size = np.nan
    elif 'ft2' in split[0]:
        print 'we are in 3'
        # It's the size
        this_size = split[0].replace('ft2', '')
        n_brs = np.nan
        print n_brs
        print this_size
    return float(this_size), float(n_brs)
this_size, n_brs = find_size_and_brs(size) 
</code></pre>

<p>This outputs:</p>

<pre><code>We made it into 1

            1
            800ft2 -


            1br -
            800
</code></pre>

<p>I can't figure out why it prints out the data twice, replacing the data a single time for each data point. </p>

<p>Thoughts?
Thanks</p>

<p>Now works for me. I made some modifications with <code>strip</code>, <code>split</code> and add comment <code># &lt;- here</code></p>

<pre><code>url_base = 'http://sfbay.craigslist.org/search/eby/apa'
params = dict(bedrooms=1, is_furnished=1)
rsp = requests.get(url_base, params=params)
# BS4 can quickly parse our text, make sure to tell it that you're giving           html
html = bs4(rsp.text, 'html.parser')

# BS makes it easy to look through a document
#print(html.prettify()[:1000])

# BS4 can quickly parse our text, make sure to tell it that you're giving html
html = bs4(rsp.text, 'html.parser')

# BS makes it easy to look through a document
#print(html.prettify()[:1000])
# find_all will pull entries that fit your search criteria.
# Note that we have to use brackets to define the `attrs` dictionary
# Because "class" is a special word in python, so we need to give a string.
apts = html.find_all('p', attrs={'class': 'row'})
#print(len(apts))

# We can see that there's a consistent structure to a listing.
# There is a 'time', a 'name', a 'housing' field with size/n_brs, etc.
this_appt = apts[15]
#print(this_appt.prettify())

# So now we'll pull out a couple of things we might be interested in:
# It looks like "housing" contains size information. We'll pull that.
# Note that `findAll` returns a list, since there's only one entry in
# this HTML, we'll just pull the first item.
size = this_appt.findAll(attrs={'class': 'housing'})[0].text
#print(size) , 'this is the size'

def find_size_and_brs(size):
    split = size.strip().split(' - ') # &lt;- here strip()
    #print len(split)
    if 'br' in split[0] and 'ft2' in split[0]:
        print 'We made it into 1'
        two = split[0].split('\n')  # &lt;- here split()
        n_brs = two[0].replace('br -', '',).strip()  # &lt;- here two[0] and strip()
        this_size = two[1].replace('ft2 -', '').strip()  # &lt;- here two[1] and strip()
        #print '&gt;', n_brs, '&lt;'
        #print '&gt;', this_size, '&lt;'
    elif 'br' in split[0]:
        print 'we are in 2'
        # It's the n_bedrooms
        n_brs = split[0].replace('br', '')
        this_size = np.nan
    elif 'ft2' in split[0]:
        print 'we are in 3'
        # It's the size
        this_size = split[0].replace('ft2', '')
        n_brs = np.nan
        print n_brs
        print this_size
    return float(this_size), float(n_brs)
this_size, n_brs = find_size_and_brs(size)
print '&gt;', this_size, '&lt;'
print '&gt;', n_brs, '&lt;'
</code></pre>

<p>ps. I use <code>&gt;</code>, <code>&lt;</code> in <code>print</code> to see spaces.</p>

python