2012-11-12 109 views
2

我有這段代碼,它使用BeatifulSoup從網站上刮取內容。正確編碼BeautifulSoup內容

short_description = soup.find('div', attrs={"class":"short-description"}) 
if short_description: 
    short_desc = short_description.find('div', attrs={"class": "std"}) 
    if short_desc: 
     adm_product.append(short_desc.renderContents()) 

long_description = soup.find('div', attrs={"class": "box-collateral box-description"}) 
if long_description: 
    long_desc = long_description.find('div', attrs={"class": "std"}) 
    if long_desc: 
    adm_product.append(long_desc.renderContents()) 
     L = [] 
     for tag in long_desc.recursiveChildGenerator(): 
      if isinstance(tag,BeautifulSoup.Tag): 
       L.append(tag.renderContents()) 
     desc = " ".join(v for v in L if v > 0) 
     print desc 
     adm_product.append(desc) 
    else: 
     adm_product.append('pas du description') 

# we get the country and producer 
for txt in product_shop.findAll(text=True): 
    if re.search('Origine',txt,re.I): 
     origin = txt.next.strip() 
     try: 
      country, producer = origin.split(', ') 
     except Exception, e: 
      pass 
     else: 
      adm_product.append(country) 
      adm_product.append(producer) 

的HTML例如輸入:

<div class="short-description"> 
             <div class="std">Barre chocolat au lait fourrée à la crème de lait<br>25g, bio et équitable<br>Produit bio contrôlé par Bio Inspecta</div> 
       </div> 

<div class="box-collateral box-description"> 
    <h2>Description du produit</h2> 
    <div class="std"> 
     <div><strong>CHOKICHOC : la barre de chocolat au lait, fourrée à la crème de lait</strong></div><br> 
<div style="text-align: justify;">Exquis mélange des plus fins cacaos et de l’aromatique sucre bio du Paraguay, CHOKICHOC est composée exclusivement de matières premières cultivées sans additif ni arôme artificiel. Tous les ingrédients proviennent de cultures biologiques. <strong>Légère, fondante, idéale pour le goûter, un vrai délice!</strong></div><br> 
<div>La commercialisation des barres CHOKICHOC garantit un prix minimum pour le producteur, des contrats d’achats à long terme ainsi que le préfinancement partiel de la récolte.</div> </div> 
</div> 
<div class="product_shop"> 
<p> 

       <label class="garanties_adm"> 
       <strong>Les garanties :</strong></label> 
       <img src="/images/adm/icon-garantie-fairtrade-ab.png"> 
          </p> 
<p> 
           <label><strong>Origine :</strong></label> 
       Burkina Faso, Cercle des Sécheurs       </p> 
<p> </p> 

</div> 

當我打印adm_product名單,我得到:

['002267', 'Barre chocolat au lait fourr\xc3\xa9e \xc3\xa0 la 
cr\xc3\xa8me de lait<br />25g, bio et \xc3\xa9quitable<br />Produit 
bio contr\xc3\xb4l\xc3\xa9 par Bio Inspecta', '<strong>CHOKICHOC : la 
barre de chocolat au lait, fourr&eacute;e &agrave; la cr&egrave;me de 
lait</strong> CHOKICHOC : la barre de chocolat au lait, fourr&eacute;e 
&agrave; la cr&egrave;me de lait Exquis m&eacute;lange des plus fins 
cacaos et de l&rsquo;aromatique sucre bio du Paraguay, CHOKICHOC est 
compos&eacute;e exclusivement de mati&egrave;res premi&egrave;res 
cultiv&eacute;es sans additif ni ar&ocirc;me artificiel. Tous les 
ingr&eacute;dients proviennent de cultures biologiques. 
<strong>L&eacute;g&egrave;re, fondante, id&eacute;ale pour le 
go&ucirc;ter, un vrai d&eacute;lice!</strong> L&eacute;g&egrave;re, 
fondante, id&eacute;ale pour le go&ucirc;ter, un vrai d&eacute;lice! 
La commercialisation des barres CHOKICHOC garantit un prix minimum 
pour le producteur, des contrats d&rsquo;achats &agrave; long terme 
ainsi que le pr&eacute;financement partiel de la r&eacute;colte.', 
'0,90\xc2\xa0', 
u'/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/0/0/002267_2.jpg', 
u'Burkina Faso', u'Cercle des S\xe9cheurs'] 

我的目錄item[1]正確編碼,但item[2]不大;也不是最後2項。

我錯過了什麼?

回答

0

我能得到這個工作的唯一方法是設置編碼,如:

# we get the country and producer 
for txt in product_shop.findAll(text=True): 
    get_origin = re.search('Origine',txt,re.I) 
    if re.search('Origine',txt,re.I): 
     origin = txt.next.strip() 
     try: 
      country, producer = origin.split(', ') 
     except Exception, e: 
      pass 
     else: 
      adm_product.append(country.encode("iso-8859-1")) 
      adm_product.append(producer.encode("iso-8859-1")) 

這則返回像「清單」:

.... 'Burkina Faso', 'Cercle des S\xe9cheurs'] 

項目[1]正確添加到列表中,因爲我使用鉻來檢查元素,它正確地將html更改爲:

<div style="text-align: justify;">Exquis mélange des plus fins cacaos et de l’aromatique sucre bio du Paraguay, CHOKICHOC est composée exclusivement de matières premières cultivées sans additif ni arôme artificiel. Tous les ingrédients proviennent de cultures biologiques. <strong>Légère, fondante, idéale pour le goûter, un vrai délice!</strong></div> 

在哪裏好像我loo k就是這樣的源代碼:

<div style="text-align: justify;">Exquis m&eacute;lange des plus fins cacaos et de l&rsquo;aromatique sucre bio du Paraguay, CHOKICHOC est compos&eacute;e exclusivement de mati&egrave;res premi&egrave;res cultiv&eacute;es sans additif ni ar&ocirc;me artificiel. Tous les ingr&eacute;dients proviennent de cultures biologiques. <strong>L&eacute;g&egrave;re, fondante, id&eacute;ale pour le go&ucirc;ter, un vrai d&eacute;lice!</strong></div><br />