0
<div class="features clearfix"> 
<span> <img src="/App_Theme/css/img/ico_area.png" width="36" height="36" class="imgvertical"> 
       78,00 a 207,00 m²    
</span> 
<span><img src="/App_Theme/css/img/ico_bed.png" class="imgvertical"></i> 

          Desde&nbsp; 
          2 
      </span> 
<span><img src="/App_Theme/css/img/ico_bath.png" width="36" height="36" class="imgvertical"> 

        Desde&nbsp; 
        2   
</span> 
<span><img src="/App_Theme/css/img/ico_garaje.png" width="36" class="imgvertical" height="36"> 
       Sin especificar 
</span> 
</div> 

试图废除上述标签内的数据,但输出字符串只打印乱码,不正确的数据编码问题蟒蛇scriaping

我的代码

import requests 
from bs4 import BeautifulSoup 
page = requests.get('https://www.fincaraiz.com.co/oceana-52/barranquilla/proyecto-nuevo-det-1041165.aspx') 
soup = BeautifulSoup(page.content, 'lxml') 
box_2 = soup.find('div' ,'features clearfix') 
box_2_1 = box_2.findAll('span') 
box2 = [] 
for row2 in box_2_1: 
    box2.append(row2.text) 
print (box2) 

但它打印输出like below

['\ r \ n 78,00 a 207,00m²r \ n \ r \ n','\ r \ n \ r \ n Desde \ xa0 \ r \ n 2 \ r \ n \ r \ n \ r \ n','\ r \ n \ r \ n Desde \ xa \ r \ n 2 \ r \ n \ r \Ñ\ r \ n '' \ r \ n \ r \ n仙especificar \ r \ n \ r \ n“]

这里预期的输出是:

78,00一个207 00平方米 Desde 2 Desde 2 仙especificar

我已经尝试过UTF-8编码的代码一起,但它仍然给了相同的输出。我怎样才能避免unicode错误?

回答

1

你正在观察的不是一个unicode问题。您提取的文本实际上包含换行符('\r\n')以及HTML实体&nbsp;转换为'\xa0'的不间断空格。

如果您需要删除这些字符,或者用空格代替它们,你可以修改你的代码是这样的:

for row2 in box_2_1: 
    text = row2.text 
    text = text.replace('\r\n', ' ') 
    text = text.replace('\xa0', ' ') 
    box2.append(text) 
print(box2) 

注意,这仍然会从您上面提供的预期输出不同。您的代码将在box2中创建一个列表,因此当您打印该列表时,您会看到方括号和逗号分隔列表元素。如果你不希望出现这种情况,你可以加入列表转换为字符串,用空格分隔元素,像这样:

print(' '.join(box2)) 
+0

如果被查询者可能会喜欢的权威:https://en.wikipedia.org /维基/非breaking_space。 –

+0

我认为没有人应该回答你的问题。你既不发表任何评论,也不将它们标记为答案。我想你不知道该怎么做。看看这个链接。没有一个人回答。 https://stackoverflow.com/users/7818121/sudharsonn-s – SIM