解析HTML tr会返回空列表(Parsing HTML tr returns empty list)

编程入门 行业动态 更新时间:2024-10-18 12:27:42
解析HTML tr会返回空列表(Parsing HTML tr returns empty list)

我正在关注这个问题和另一个 问题 ,以便从维基百科解析一个表。

具体来说,我想获取所有行,并在每行中转储每列的内容。

我的代码使用MacOS X下的xml库,但我得到的只是一个空行列表

import xml.etree.ElementTree s = open("wikiactors20century.txt", "r").read() # tree = xml.etree.ElementTree.fromstring(s) # rows = tree.findall() # headrow = rows[0] # datarows = rows[1:] # # for num, h in enumerate(headrow): # data = ", ".join([row[num].text for row in datarows]) # print "{0:<16}: {1}".format(h.text, data) table = xml.etree.ElementTree.XML(s) rows = iter(table) headers = [col.text for col in next(rows)] for row in rows: values = [col.text for col in row] print dict(zip(headers, values))

输入文件已粘贴到PasteBin中 。 xml.etree.ElementTree.fromstring和xml.etree.ElementTree.XML版本都无法检索行列表。 但是,如果我像这样做一个虚拟表

s = "<table> <tr><td>a</td><td>1</td></tr> <tr><td>b</td><td>2</td></tr> <tr><td>c</td><td>3</td></tr> </table>"

然后解析工作正常。

我究竟做错了什么? 在解析文件之前是否必须应用一些清洁?

I am following this question and this other one in order to parse a table from Wikipedia.

Specifically, I'd like to just get all the rows, and within each row, dump the contents of each column.

My code uses the xml library under MacOS X, but all I get is an empty list of rows.

import xml.etree.ElementTree s = open("wikiactors20century.txt", "r").read() # tree = xml.etree.ElementTree.fromstring(s) # rows = tree.findall() # headrow = rows[0] # datarows = rows[1:] # # for num, h in enumerate(headrow): # data = ", ".join([row[num].text for row in datarows]) # print "{0:<16}: {1}".format(h.text, data) table = xml.etree.ElementTree.XML(s) rows = iter(table) headers = [col.text for col in next(rows)] for row in rows: values = [col.text for col in row] print dict(zip(headers, values))

The input file has been pasted here in PasteBin. Both xml.etree.ElementTree.fromstring and xml.etree.ElementTree.XML versions cannot retrieve the row list. However, if I make a dummy table as this

s = "<table> <tr><td>a</td><td>1</td></tr> <tr><td>b</td><td>2</td></tr> <tr><td>c</td><td>3</td></tr> </table>"

then parsing works fine.

What am I doing wrong? Is there some cleaning I must apply before parsing the file?

最满意答案

你的尝试与wikipedia示例没有相同的结构。

>>> list(table) [<Element 'thead' at 0x7ff0fdb73f50>, <Element 'tbody' at 0x7ff0fdb78590>, <Element 'tfoot' at 0x7ff0fb995a90>]

你可以获得标题名称:

>>> columns = list(k.text for k in table[0][0])

然后iter每行构建数据表:

>>> data_table = list(dict(zip(columns, list(v.text for v in row))) for row in table[1]) >>> print(json.dumps(data_table, indent=2)) [ { "L,S": "L", "Cause of death": "~", "null": "F", "Noms": "1", "Wins": "0", "Age": "26", "Actor": null, "Born": "1990", "Film": null, "Last": "~", "WoF": "~", "Died": "~", "First": "2001" }, { "L,S": "1L,1S", "Cause of death": "~", "null": "M", "Noms": "2", "Wins": "0", "Age": "39", "Actor": null, "Born": "1977", "Film": null, "Last": "~", "WoF": "~", "Died": "~", "First": "2001" }, [...]

注意:链接和内部标记存在一些解析问题。 它可以通过itertext或更深层次的解析来解决。

Your try does not have the same structure like wikipedia example has.

>>> list(table) [<Element 'thead' at 0x7ff0fdb73f50>, <Element 'tbody' at 0x7ff0fdb78590>, <Element 'tfoot' at 0x7ff0fb995a90>]

You can get headers name with:

>>> columns = list(k.text for k in table[0][0])

And then iter every rows to build data table:

>>> data_table = list(dict(zip(columns, list(v.text for v in row))) for row in table[1]) >>> print(json.dumps(data_table, indent=2)) [ { "L,S": "L", "Cause of death": "~", "null": "F", "Noms": "1", "Wins": "0", "Age": "26", "Actor": null, "Born": "1990", "Film": null, "Last": "~", "WoF": "~", "Died": "~", "First": "2001" }, { "L,S": "1L,1S", "Cause of death": "~", "null": "M", "Noms": "2", "Wins": "0", "Age": "39", "Actor": null, "Born": "1977", "Film": null, "Last": "~", "WoF": "~", "Died": "~", "First": "2001" }, [...]

Note: There is some parsing issues with links, and inner tags. It can be solved with itertext or deeper parsing.

更多推荐

本文发布于:2023-07-07 21:34:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1068485.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表   tr   HTML   Parsing   list

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!