我有一个包含多个列表的网站的源代码。现在我想在python中将这些列表的信息提取为可用的格式。
例如,请参阅以下国家/地区列表的第一个列表条目:
<ul class='checklist__list'>
<li class=' checklist__item' id='checklist__item--country-111'>
<label class='checklist__label ripple-animation'>
<input class="checklist__input js-checklist__input idb-on-change" type="checkbox" id="111" name="country" value="111">
Germany
</input>
</label>
</li>
说,我现在对国家ID(这里:111)和匹配的国家/地区名称(这里是德国)感兴趣,并希望在python中以可用的格式使用它,例如pandas dataframe或dictionary。 / p>
有谁知道一个简单的方法吗?原始列表包含> 100个国家/地区。
非常感谢您的建议!
答案 0 :(得分:1)
您可以使用BeautifulSoup轻松解决此问题。
鉴于您在问题中发布的标记,此代码段应提取id
和label
:
from bs4 import BeautifulSoup as bs
html = """<ul class='checklist__list'>
<li class=' checklist__item' id='checklist__item--country-111'>
<label class='checklist__label ripple-animation'>
<input class="checklist__input js-checklist__input idb-on-change" type="checkbox" id="111" name="country" value="111">
Germany
</input>
</label>
</li>"""
soup = bs(html)
label = soup.find("label").text
id = soup.find("input").get("value")
您必须清除标签,因为输出中有一些无关的空格和换行符,但您应该能够扩展此示例,但需要进一步处理这些项目。
要处理多个列表项,这些列表项都具有与上面相同的标记格式,您可以使用此代码段:
lis = soup.find_all("li") # This will return a list of all line items in the markup.
for li in lis:
li_label = li.find("label").text
li_id = li.find("input").get("id")
print(li_label, li_id)