使用BeautifulSoup从XML文档中提取unicode文本

时间:2017-05-16 10:26:35

标签: python xml beautifulsoup

我有这段代码:

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>\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>

1 个答案:

答案 0 :(得分:3)

首先,如果您使用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()次转换;现在,您找到了每个unicode元素找到<speech>个对象的列表。