首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用美汤在<div>标签中获取特定字符串

使用美汤在<div>标签中获取特定字符串
EN

Stack Overflow用户
提问于 2021-08-11 17:31:38
回答 2查看 32关注 0票数 0

我有一个用来提取的标签列表:

代码语言:javascript
复制
soup.findAll('div', {'class': 'formelement'}):

输出为:

代码语言:javascript
复制
[<div class="formelement">
 <label class="libelle" for="field_tit">Etat :</label>
                    Publié              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Type de produit :</label>
                    Plaque de plâtre                </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Numéro :</label>
                                            PP/48-05                                    </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Titulaire :</label>
                    CIA ESPAÑOLA DE AISLAMIENTOS SA             </div>,
 <div class="formelement">
 <label class="libelle" for="field_ref">Usine :</label>
                    39              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date d'admission :</label>
                        13/07/2017                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de reconduction :</label>
                        04/02/2021                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de fin de validité :</label>
                        04/05/2022                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Certificat PDF :</label>
 <a href="application/docs/certificats/PP_48_05.pdf" target="_blank">
 <img src="public/images/pdf.gif" title="Télécharger le certificat au format PDF"/>
 </a>
 </div>]

我的目标是有一个字典:

代码语言:javascript
复制
product_data = {
"Numéro": "PP/48-05",
"Titulaire": "CIA ESPAÑOLA DE AISLAMIENTOS SA",
"Usine": "39",
"Date de fin de validité": "04/05/2022",
"Certificat PDF": "application/docs/certificats/PP_48_05.pdf"
}

我试着用

代码语言:javascript
复制
for div in soup.findAll('div', {'class': 'formelement'}):
        product_data[div.text] = div.next_sibling

但它将接受标记中的所有字符串(显然),并且找不到任何方法来分别获取div中的两个字符串。如何分别获取这些字符串?

我希望我的问题足够明确。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-11 17:49:08

您可以销毁/分解内部标记

代码语言:javascript
复制
from bs4 import BeautifulSoup

html="""
<div class="formelement">
 <label class="libelle" for="field_tit">Etat :</label>
                    Publié              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Type de produit :</label>
                    Plaque de plâtre                </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Numéro :</label>
                                            PP/48-05                                    </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Titulaire :</label>
                    CIA ESPAÑOLA DE AISLAMIENTOS SA             </div>,
 <div class="formelement">
 <label class="libelle" for="field_ref">Usine :</label>
                    39              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date d'admission :</label>
                        13/07/2017                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de reconduction :</label>
                        04/02/2021                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de fin de validité :</label>
                        04/05/2022                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Certificat PDF :</label>
 <a href="application/docs/certificats/PP_48_05.pdf" target="_blank">
 <img src="public/images/pdf.gif" title="Télécharger le certificat au format PDF"/>
 </a>
 </div>"""

soup = BeautifulSoup(html, 'html.parser')
data = {}
for div in soup.findAll('div', {'class': 'formelement'}):
    label = div.find('label')
    key = label.text[:-2]
    label.decompose()
    try:
        value = div.find('a').get('href')
    except AttributeError:
        value = div.text.strip()
    data[key] = value
print(data)

输出

代码语言:javascript
复制
{'Etat': 'Publié', 'Type de produit': 'Plaque de plâtre',
 'Numéro': 'PP/48-05', 'Titulaire': 'CIA ESPAÑOLA DE AISLAMIENTOS SA', 
 'Usine': '39', "Date d'admission": '13/07/2017', 
 'Date de reconduction': '04/02/2021', 'Date de fin de validité': '04/05/2022', 
 'Certificat PDF': 'application/docs/certificats/PP_48_05.pdf'}
票数 2
EN

Stack Overflow用户

发布于 2021-08-11 17:46:44

尝试:

代码语言:javascript
复制
from bs4 import BeautifulSoup

html_doc = """
<div class="formelement">
 <label class="libelle" for="field_tit">Etat :</label>
                    Publié              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Type de produit :</label>
                    Plaque de plâtre                </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Numéro :</label>
                                            PP/48-05                                    </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Titulaire :</label>
                    CIA ESPAÑOLA DE AISLAMIENTOS SA             </div>,
 <div class="formelement">
 <label class="libelle" for="field_ref">Usine :</label>
                    39              </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date d'admission :</label>
                        13/07/2017                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de reconduction :</label>
                        04/02/2021                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Date de fin de validité :</label>
                        04/05/2022                      </div>,
 <div class="formelement">
 <label class="libelle" for="field_tit">Certificat PDF :</label>
 <a href="application/docs/certificats/PP_48_05.pdf" target="_blank">
 <img src="public/images/pdf.gif" title="Télécharger le certificat au format PDF"/>
 </a>
 </div>
 """

soup = BeautifulSoup(html_doc, "html.parser")

allowed_keys = {
    "Numéro",
    "Titulaire",
    "Usine",
    "Date de fin de validité",
    "Certificat PDF",
}

data = []
for f in soup.select(".formelement"):
    key_value = f.get_text(strip=True, separator="|").split("|")
    if len(key_value) == 1:
        a = f.find("a")
        if a:
            key_value = [key_value[0], a["href"]]
        else:
            continue
    key_value[0] = key_value[0].strip(" :")
    if key_value[0] not in allowed_keys:
        continue
    data.append(key_value)


out = dict(data)
print(out)

打印:

代码语言:javascript
复制
{
    "Numéro": "PP/48-05",
    "Titulaire": "CIA ESPAÑOLA DE AISLAMIENTOS SA",
    "Usine": "39",
    "Date de fin de validité": "04/05/2022",
    "Certificat PDF": "application/docs/certificats/PP_48_05.pdf",
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68746553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档