从html列表中提取信息到pandas df / list / dict(python 3.0)

时间:2018-05-02 14:53:28

标签: python html list pandas html-lists

我有一个包含多个列表的网站的源代码。现在我想在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个国家/地区。

非常感谢您的建议!

1 个答案:

答案 0 :(得分:1)

您可以使用BeautifulSoup轻松解决此问题。 鉴于您在问题中发布的标记,此代码段应提取idlabel

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)