【问题标题】:Extract unicode text from XML document with BeautifulSoup使用 BeautifulSoup 从 XML 文档中提取 unicode 文本
【发布时间】:2017-05-16 10:26:34
【问题描述】:

我有这个代码:

for fileid in wordlist.fileids()[4:5]:
    url = open(fileid, 'r').read()
    soup = BeautifulSoup(url)
    find_all = soup.find_all("speech", soup)
    soup_sub = re.sub("<.+?>", "", str(find_all))
    print fileid
    print soup_sub

从本地 xml 文件中得到一个特定的元素。然后它从其中取出 xml 代码并打印一个列表。该列表的片段在这里。你可以看到里面有分配的unicode。如何从该列表中获取此 unicode?​​p>

<p>\nIk heet de minister van Sociale Zaken en Werkgelegenheid van harte welkom. Er hebben zich vijf sprekers voor dit VAO aangemeld.\u200a\n, \nVoorzitter. Ik wil drie moties indienen. Dit wordt topsport voor mij.\u200a\n\nMotie\nDe Kamer,\u200a\ngehoord de beraadslaging,\u200a\noverwegende dat bedrijfsongevallen wel bij de inspectie gemeld moeten worden en beroepsziekten niet;\u200a\noverwegende dat door registratie van beroepsziekten optimaal preventief beleid gevoerd kan worden;\u200a\</p>

【问题讨论】:

    标签: python xml beautifulsoup


    【解决方案1】:

    首先,如果您使用 BeautifulSoup 解析 XML,请执行 pick the right parser for the job(并安装 lxml)。您可以将打开的文件对象传递给 BeautifulSoup,在解析之前无需将其全部读入内存:

    with open(fileid, 'r') as xml_file:
        soup = BeautifulSoup(xml_file, 'xml')
    

    接下来,不要使用str(find_all);这会将所有元素对象转换为单个(字节)字符串,并且您将无法再访问原始 Unicode 文本内容。

    使用Element.get_text() method 从每个元素中提取文本:

    speech_elements = soup.find_all("speech")
    speech_text = [elem.get_text() for elem in speech_elements]
    

    这将确保您仍然获得完整的unicode 内容,而不是一些str() 转换;您现在有一个列表,其中包含每个 &lt;speech&gt; 元素找到的 unicode 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      相关资源
      最近更新 更多