2

BeatifulSoup を使用してサイトからコンテンツをスクレイピングするこのコードがあります。

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 項目もそうではありません。

私は何が欠けていますか?

4

1 に答える 1

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']

chromeを使用して要素を検査していたため、item [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>

ソースコードを見ると、次のようになります。

<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 />
于 2012-11-12T20:28:23.033 に答える