从列表中提取由html标记包围的字符串?

时间:2014-01-28 12:46:19

标签: python python-2.7 beautifulsoup

我使用BeautifulSoup来解析网站并存储内容。它采用以下形式:

records = [[[<p>data_1_1</p>], [<p>data_1_2</p>],[], [<li>data_1_3</li>]],
           [[<p>data_2_1</p>], [<p>data_2_2</p>], [], [<li>data_2_3</li>]]]

我无法做到这一点:

records = [["data_1_1", "data_1_2", "data_1_3"],
           ["data_2_1", "data_2_2", "data_2_3"]]

我尝试了列表推导:

text_records = [sum(record, []) for record in records]

但该文字仍包含在<p><li>标记中。

text_records = [item.string for item in sum(record, []) for record in records]

从标签中取出文本,但是这会给出一个大的列表,重复多次相同的值。

我知道python中的列表推导有很多,我已经搜索过了,但我找不到任何可以帮助解决这种情况。

2 个答案:

答案 0 :(得分:1)

编辑 - 即使对于多个项目也是如此:

[sum([v.string for v in [item for item in record if item]], []) for record in records]

添加总和将确保每个记录的所有列表合并为一个。

原件:

只要您始终只有一个项目的内部列表,这应该可以正常工作:

[[item[0].string for item in row if item] for row in records]

这将遍历每条记录,确保记录与if语句一起存在,然后将列表的第一个元素以其字符串格式附加到新记录中。

答案 1 :(得分:0)

这将完成工作就好了(虽然这很多for循环很烦人,欢迎任何建议)。

records1 = [BeautifulSoup(k).text for i in records for j in i for k in j]

相关问题